본문 바로가기

알고리즘 공부/프로그래머스 > Python3

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

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

코딩테스트 연습 - 영어 끝말잇기

3 [tank, kick, know, wheel, land, dream, mother, robot, tank] [3,3] 5 [hello, observe, effect, take, either, recognize, encourage, ensure, establish, hang, gather, refer, reference, estimate, executive] [0,0]

programmers.co.kr

 

<문제에서 주목해야 할 사항>

ⓐ 한 글자인 단어는 인정되지 않습니다.

ⓑ 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다.

ⓒ 이전에 등장했던 단어는 사용할 수 없습니다.

ⓓ 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다.

이정도만 명심해두고 문제 풀면 나름 금방 풀 수 있다.

 

[정답]

 

 

 

1. 사람의 번호를 num으로 잡고 1로 초기화한다.

2. 이전에 등장했던 단어를 추가할 리스트 past를 정의한다.

3. 만약 words[i]의 길이가 1이면, break. →ⓐ

4. 만약 words[i]가 리스트 past에 있다면, break.

5. 만약 리스트 past에 단어가 들어있고 words[i]의 첫번째 문자와 past[i-1]의 마지막 문자가 다를 경우, break.

6. 3~5에 해당하지 않는다면, 다음 비교로 넘어가기 위해 리스트 past에 words[i]를 넣는다. 만약 num이 n일때, 다시 1번 사람으로 num=1해주고 아니면 num+=1해준다. →ⓑ

7. 만약 for문을 다 돌고도 이상이 없으면 즉 끝말잇기가 정상적으로 진행되었다면, 리스트 past와 words는 같을 것이다. 그러므로 answer에 [0,0]를 더한다.

8. 만약 끝말잇기가 정상적으로 진행되지 않았다면, 즉 리스트 past와 words가 같지 않다면, answer은 [번호,차례]를 넣어주어야 한다. 그러므로 사람의 번호 num을 append하고, 차례를 계산한 len(past)//n+1을 append한다.