티스토리 뷰

반응형

문제 출처

영어 끝말잇기를 하는데 탈락하는 사람의 번호와 그 사람 기준 몇번째 턴에 탈락했는지를 구하는 문제이다.

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
반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
농담곰의 고군분투 개발기