티스토리 뷰
반응형
영어 끝말잇기를 하는데 탈락하는 사람의 번호와 그 사람 기준 몇번째 턴에 탈락했는지를 구하는 문제이다.
3명의 사람이 있을 때, 4번째 순서에 탈락했다고 하면 1번은 자기의 2번째에 탈락한 것이므로 [1,2]를 반환하면 된다.
탈락 조건은 끝말잇기의 규칙인 마지막글자와 첫 글자가 다를때와 이미 사용한 단어를 재사용했을 때 탈락처리된다.
나는 현재와 이전을 나눠 맨 앞글자, 그리고 이전 단어의 마지막글자를 비교했고
dic에 등장단어를 추가해 재등장했을 때 탈락되도록 했다.
반환값은 총 두개로
현재 누가 탈락했는지,
그 사람의 몇번째 순서에서 탈락했는지이며 각각
현재 누가 탈락했는지 === 현재 순서에서 인원수를 나눈 나머지 + 1(전체 2명, 현재 5턴째 탈락 === (4 % 2 + 1)== 1번째 탈락
그 사람의 몇번째 순서에서 탈락했는지 === 현재 순서에서 전체인원 나눈 몫 === (전체 3명, 현재 9턴째 탈락 === ((8 + 1)/ 3) == 3번째 탈락
여기서 5턴인데 4로 계산한 이유는 이전 단어 비교를 위해 인덱스를 1부터 시작하여 실제 순서 카운트가 한칸 씩 밀려서 인덱스를 그대로 쓰고 나머지에 + 1을 해준 것이다.
import math
def solution(n, words):
answer = [0, 0]
word_dic = {words[0] : 0}
for i in range(1, len(words)):
curr_last_char = words[i][0] # 현재, 맨 앞 글자
before_last_char = words[i - 1][-1] #이전 마지막 글자
if (words[i] not in word_dic):
word_dic[words[i]] = i
else :
#재등장 단어일 때 탈락
answer = [1 + (i % n), math.ceil((i + 1) / n)]
break
if (curr_last_char != before_last_char):
#이전 마지막과 현재 앞글자가 다르면
answer = [1 + (i % n), math.ceil((i + 1) / n)]
break
return answer
반응형
'문제풀이' 카테고리의 다른 글
프로그래머스 다음 큰 숫자 (구현) lv2 (0) | 2021.09.15 |
---|---|
프로그래머스 위클리챌린지 5주차_모음사전 (dfs) (0) | 2021.09.15 |
백준 2638 치즈 (dfs + bfs) (0) | 2021.07.12 |
백준 다리만들기 (dfs + bfs) (0) | 2021.07.12 |
프로그래머스 타겟넘버 js (0) | 2021.05.19 |
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
농담곰의 고군분투 개발기