https://school.programmers.co.kr/learn/courses/30/lessons/12981

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

해시를 사용한 간단한 시뮬레이션 문제입니다. 우리가 체크해야하는 조건은 3가지 입니다.

 

1. 앞 사람이 말한 단어의 마지막 글자로 시작해야합니다.

2. 앞에서 나오지 않은 단어여야 합니다.

3. 끝말잇기가 진행된 차례 수와, 말한 참가자의 번호를 알아야 합니다.

 

1번 조건은 제일 첫 참가자를 제외하고 이전에 나온 단어의 마지막 글자를 저장하고 비교하여 구현할 수 있습니다.

2번 조건은 단어가 나올때 마다 이를 set, map 등 문자열을 key로 접근할 수 있는 해시 자료구조에 넣어 구현할 수 있습니다.

3번 조건은 어차피 단어를 입력된 순서대로 봐야하므로 Iterator나 forEach 구문 대신 idx를 사용해 단어에 접근하고, 참가자 번호는 n으로 나머지연산을 취해 n개의 값을 돌도록 구현했습니다.

 

def solution(n, words):
    answer = [0, 0]
    b = words[0][-1]
    idx = 1
    who = 1
    duple = {}
    duple[words[0]] = 1
    
    while idx < len(words):
        if words[idx] in duple or words[idx][0] != b:
            answer = [who + 1, (idx // n) + 1]
            break
        else:
            b = words[idx][-1]
            duple[words[idx]] = 1
            who = (who + 1) % n
            idx += 1
    
    return answer
728x90

+ Recent posts