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

 

Lv2 문제고, 스스로 푼 문제다!

 

문제 이해 

 

이미 말한 단어들을 담는 리스트는 passed로 하고, 조건을 만족하는 단어들을 passed.append()한다 

1번 부터 n번까지의 사람의 번호를 식별하기 위해 i를 이용했고, i == n + 1일 때는 다시 1번으로 바꿔주고 이 때 한 사이클을 돌았으니까 count += 1 해준다 

 

passed에 있는 단어를 말하거나 전 사람이 말한 단어의 끝 단어로 시작하는 단어를 말하지 않는 경우 while문을 break 한다. 여기서 주의해야할게 if len(passed) > 0이 없으면, 처음 시작할 때는 passed =[] 이므로 Indexerror가 날 수 있다. 

끝말 잇기가 중간에 멈춘경우를 식별하기 위해 flag를 이용했고, 이 값이 False이면 멈춘 사람의 번호와 사이클 횟수를 반환하고 끝까지 간 경우에는 flag == True이므로 [0,0]을 반환해준다

 

주의해야할 점 

1. pass는 연산자이므로, 변수이름으로 사용하면 안된다

2. while문에서 끝말잇기 조건 만족하는 단어 passed.append()하는거 빼먹었다 

3. i += 1 빼먹었다

4. return 하는 순서 바꿔서 반환했다

 

- 정답 풀이 :

def solution(n, words):
    m = len(words)
    passed = []
    i = 1
    count = 1
    flag = True
    while words : 
        if i == n + 1:
            i = 1
            count += 1
        x = words.pop(0)
        if x in passed:
            flag = False
            break
        elif len(passed) > 0:
            if passed[-1][-1] != x[0]:
                flag = False
                break
        passed.append(x)
        i += 1
    
    if not flag: 
        return [i, count]
    else: 
    	return [0,0]

+ Recent posts