Programmers Code/Level 2

[Programmers] level2 - 영어 끝말잇기 (Python) : Summer/Winter coding(~2018)

NIMHO 2022. 7. 18. 21:54
728x90

▶영어 끝말잇기 - Summer/Winter coding(~2018) (level 2)

문제          ▶제한사항

문제 및 제한 사항은 너무 긴 거 같아서 링크로 대체하겠습니다.

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

 

프로그래머스

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

programmers.co.kr

 

출력

입출력 예 #1
3명의 사람이 끝말잇기에 참여하고 있습니다.

  • 1번 사람 : tank, wheel, mother
  • 2번 사람 : kick, land, robot
  • 3번 사람 : know, dream, tank

와 같은 순서로 말을 하게 되며, 3번 사람이 자신의 세 번째 차례에 말한 tank라는 단어가 1번 사람이 자신의 첫 번째 차례에 말한 tank와 같으므로 3번 사람이 자신의 세 번째 차례로 말을 할 때 처음 탈락자가 나오게 됩니다.

입출력 예 #2
5명의 사람이 끝말잇기에 참여하고 있습니다.

  • 1번 사람 : hello, recognize, gather
  • 2번 사람 : observe, encourage, refer
  • 3번 사람 : effect, ensure, reference
  • 4번 사람 : take, establish, estimate
  • 5번 사람 : either, hang, executive

와 같은 순서로 말을 하게 되며, 이 경우는 주어진 단어만으로는 탈락자가 발생하지 않습니다. 따라서 [0, 0]을 return 하면 됩니다.

입출력 예 #3
2명의 사람이 끝말잇기에 참여하고 있습니다.

  • 1번 사람 : hello, even, now, draw
  • 2번 사람 : one, never, world

와 같은 순서로 말을 하게 되며, 1번 사람이 자신의 세 번째 차례에 'r'로 시작하는 단어 대신, n으로 시작하는 now를 말했기 때문에 이때 처음 탈락자가 나오게 됩니다.

 

풀이

단어를 검색하는데 빠르게 하기 위해서 dictionary를 이용해서 answer를 만들어줬다.

하나씩 말할 때마다 answer에 넣어주는데, answer에 있다면 실패.

 

그리고 elif를 보면 이전에 말한 단어에 끝과, 새로 말한 단어의 젤 앞이 같아야 한다.

다르다면 else로 결과 값을 return 해준다.

 

for문이 제대로 끝났다면 문제가 없다는 것이기 때문에 [0, 0]을 return 해준다.

for문에서 return 해줄 때는 i를 기준으로 생각해서 값을 도출하면 된다.

def solution(n, words):
    answer = {}
    answer[words[0]] = 1
    for i in range(1, len(words)):
        if words[i] in answer:
            return [i % n + 1, i // n + 1]          
        elif words[i-1][len(words[i-1]) - 1] == words[i][0]:
            answer[words[i]] = 1
            continue
        else:
            return [i % n + 1, i // n + 1]
    return [0,0]

효율성이 없는 문제는 쉽게 풀 수 있다. 어떻게든 정답만 찾아내면 되니까..ㅎ

728x90