▶영어 끝말잇기 - Summer/Winter coding(~2018) (level 2)
▶문제 ▶제한사항
문제 및 제한 사항은 너무 긴 거 같아서 링크로 대체하겠습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12981
▶출력
입출력 예 #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]
효율성이 없는 문제는 쉽게 풀 수 있다. 어떻게든 정답만 찾아내면 되니까..ㅎ
'Programmers Code > Level 2' 카테고리의 다른 글
[Programmers] level2 - 행렬의 곱셈 (Python) : 연습문제 (0) | 2022.07.25 |
---|---|
[Programmers] level2 - 게임 맵 최단거리 (Python) : 깊이/너비 우선 탐색(DFS/BFS) (0) | 2022.07.19 |
[Programmers] level2 - 2 x n 타일링 (Python) : 연습문제 (0) | 2022.07.17 |
[Programmers] level2 - 수식 최대화 (Python) : 2020 카카오 인턴십 (0) | 2022.07.16 |
[Programmers] level2 - 짝지어 제거하기 (Python) : 2017 팁스타운 (0) | 2022.07.15 |