[코테] 해쉬 - 영어 끝말잇기[프로그래머스]

Bpius·2023년 6월 12일
0

알고리즘 문제풀이

목록 보기
22/28
post-thumbnail

문제

출처: 프로그래머스 - 영어 끝말잇기

풀이

끝말잇기 문제는 문제에서 제시하는 것을 그대로 구현할 수 있는지 묻는 구현 문제에 가깝다.

  1. 해쉬의 set 자료구조가 아닌, 단순히 중복을 체크하는 것이기에 list 자료구조를 만들어서 확인해도 문제가 없지만 set 자료구조를 일단 사용했다.

  2. 단어를 확인하면서 첫 글자와 마지막 글자가 일치하는지 그리고 해쉬의 set 자료구조를 써서 중복이 되는지 여부를 확인한다.
    'for~else'구문을 활용하면 되는데, 'for~else'구문은 for 반복문이 아무런 문제없이 진행되었다면 else 구문을 마지막으로 실행하게 하는 방법이다.

  3. 끝까지 확인하였을 때 문제가 없다면 'for~else' 구문으로 else문에 [0, 0]을 반환하면 된다.
    하지만 현재 단어의 마지막 알파벳이 다음 단어의 처음 알파벳과 다르거나 이미 사용한 단어라면 해당 단어 순서 사람의 번호와 차례를 바로 반환하면 된다.

  4. 파이썬은 0부터 시작하기에,
    해당 사람의 번호는 반복문의 번호(i)에서 게임 참여 인원수(n)의 나머지에서 1을 더해준 값을, 해당 사람의 차례는 번호(i)에서 게임 참여 인원수(n)의 몫에서 1을 더하면 된다.
    예) 2사람이 게임 중 words의 3번째(i = 2, 파이썬은 0부터 시작)에서 틀렸다면,
    첫 번째 사람, 두 번째 사람, 첫 번째 사람(반환 시점)이기에 'i(2) %(나머지) n(게임 인원: 2)'는 0이기에 여기서 1을 더해줘서 1번째 사람이 틀렸다는 것을 알 수 있다.
    그리고 차례는 2번째 이므로 'i(2) //(몫) n(게임 인원: 2)'는 1이기에 여기서 1을 더해줘서 2번째 차례라는 것을 반환하면 된다.

코드

def solution(n, words):
    sH = set() # 지속적인 중복을 확인하는 것이 아닌 한 번만 확인하기에, list 자료구조를 사용해도 된다.
    sH.add(words[0]) # 두 번째 순서부터 확인하여 그 앞의 순서와 비교하기에 제일 처음 단어를 넣어준다.
    
    for i in range(1, len(words)): # 0부터 확인하게 되면 제일 마지막 단어를 set에 넣어서 확인하기에 잘못된 값을 반환할 수 있다.
    
        if words[i - 1][-1] == words[i][0] and words[i] not in sH: # 문제 제시를 그대로: 앞의 단어 마지막과 뒤 단어의 처음이 같아야 하며, 중복이 아니라면 set예 계속 추가
            sH.add(words[i])
        else: # 아니라면 틀린 사람의 번호, 차례 반환
            return [i%n +1, i//n +1]

    else: # for 반복문이 아무런 문제없이 진행되었다면 0, 0을 반환
        return [0, 0]
profile
데이터 굽는 타자기

0개의 댓글