인덱스 파티 : 영어 끝말잇기

solee·2022년 9월 16일
0

Python

목록 보기
12/16

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

포인트는, 끝말잇기가 정상적으로 이루어지고 있는지, 즉 해당 단어의 끝과 다음 단어의 처음이 일치하는지를 확인하는 것 하나와 기존에 등장했던 단어인지, 즉 중복되는 단어인지를 파악하는 것이다.
일단 해당 단어를 찾으면 그 단어의 index로 몫과 나머지를 활용해 차례와 몇 번째 사람인지를 확인할 수 있겠다고 생각했다.


def solution(n, words):
    done   = [" "]
    
    for i in range(len(words)):
        if i != 0 and words[i][0] != done[-1][-1]:
            break
        if words[i] in done:
            break
        else:
            done.append(words[i])
    else:
        return [0,0]
    
    number = n if (i+1)%n == 0 else (i+1)%n
    turn   = (i+1)//n +1 if (i+1)%n > 0 else (i+1)//n
    return [number, turn]

for문 안에 첫째 if로 끝말잇기가 정상적으로 이루어지고 있는지 확인한다. 두 번째 if로는 중복되는 단어인지 확인한다. 그렇게 break를 걸어 나온 index에 1을 더해 차례와 몇 번째 사람인지를 계산해 리턴한다.

for문 자체에 else를 걸어서 아무 문제 없이 끝난다면 곧바로 [0,0]을 리턴하게 했다.

효율성은 그렇게까지 좋지는 않다 ㅠㅠ




다른 사람의 풀이를 살펴보다가 감동받은 부분인데,

if words[p][0] != words[p-1][-1] or words[p] in words[:p]: return [(p%n)+1, (p//n)+1]

for문 내부의 if문들을 이렇게 한 문장으로 만든 것이 있었다. 또 중복 여부를 확인하려고 append하는 것이 아니라 [:p]를 사용한 부분이 정말 천재적이라고 생각했다.

profile
DA DA DA

0개의 댓글