[프로그래머스] Lv2 - 영어 끝말잇기

김멉덥·2023년 8월 30일
0

알고리즘 공부

목록 보기
86/171
post-thumbnail
post-custom-banner

문제

프로그래머스 Summer/Winter Coding(~2018)


코드 구현

def solution(n, words):
    answer = []

    # 1 -> 2 -> 3 -> 1 -> 2 ... 돌아가면서 진행
    # 1. 앞사람 단어의 끝나는 글자로 시작하지 못하면 X
    # 2. 이전에 등장한 단어 사용 X
    # 3. 한글자 단어 X
    # [탈락하는 사람의 번호, 자신이 몇번째 차례에 탈락하게 된지]

    pass_word = []

    for i, w in enumerate(words):
        # 첫번째 단어가 아닐 때 검사할 부분 (위 주석의 1, 2번 조건)
        if(i > 0):
            if(w[0] != words[i-1][-1]):     # 1번 조건
                out = (i % n) + 1
                out_time = (i // n) + 1
                answer.append(out)
                answer.append(out_time)
                break
            if(w in pass_word):             # 2번 조건
                out = (i % n) + 1
                out_time = (i // n) + 1
                answer.append(out)
                answer.append(out_time)
                break
        # 첫번째 단어도 검사해야하는 부분 (3번 조건)
        if(len(w) == 1):                    # 3번 조건
            out = (i % n) + 1
            out_time = (i // n) + 1
            answer.append(out)
            answer.append(out_time)
            break

        pass_word.append(w)     # 모든 검사에서 통과한 단어는 pass_word에 넣어서 다음 단어를 검사할 때 사용

    if(len(answer) == 0):   # 모든 조건에서 걸리지 않고 나왔을 때, 탈락자는 없다
        return [0, 0]

    return answer

풀이

  • out = (i % n) + 1, out_time = (i // n) + 1
    을 설정하는 부분에서 이상하게 해맸다. 처음에는 (i + 1) % n 이런식으로 설정해버려서 이거 해결하는데 시간을 이상하게 좀 소모했다 ㅠ
  1. 앞사람 단어의 끝나는 글자로 시작하지 못하면 X
  2. 이전에 등장한 단어 사용 X
  3. 한글자 단어 X

이 세가지 조건을 검사하며 가장 먼저 탈락하는 사람을 찾아야 한다.

  • 1번과 2번 조건은 앞 단어가 존재하여야 검사할 수 있는데 3번 조건은 맨 첫번째 단어에서도 검사해야 한다.
  • 이번 단어가 모든 검사에서 통과한다면, 다음 단어의 중복 검사를 위해 pass_word 배열에 넣어준다.

profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

0개의 댓글