PS/프로그래머스

[Python] 영어 끝말잇기

s_omi 2024. 11. 8. 10:00
728x90
반응형
SMALL

✏️ 문제

 

문제 파악

중복된 단어가 있는 지 확인은 words 배열 내에 해당 단어를 count 했을 때 2 이상인 지로 확인했다.

 

중복된 단어가 또 나오는 지 확인할 때 단순히 중복된 단어가 있으면 bool 상태만 변경해서 중복된 단어가 또 나왔는 지 확인하는 방향으로 코드를 짰다.

근데 bool 타입으로 하면 배열 내에 중복된 단어가 두 개 이상일 때 앞에 중복되었다고 체크한 단어랑 지금 단어가 같은 지 확인이 안됐다. 

 

그래서 중복되면 dup라는 배열에 넣고 뒤에 중복 단어가 나오면 dup 배열에 있는 지 확인했다.

dup 배열에 있으면 단어를 중복해서 말한 거고, dup 배열에 없으면 단어를 중복해서 말한 게 아니게 된다.

 

 

코드

def solution(n, words):
    index = -1
    dup = []
    
    for i in range(len(words)-1):
        cnt, net = words[i], words[i+1]
        
        # 끝말 안잇기
        if cnt[-1] != net[0]:
            index = i+1
            break
        
        # 중복
        if words.count(cnt) > 1:
            if cnt not in dup:
                dup.append(cnt)
            else:
                index = i
                break
        if words.count(net) > 1:
            if net not in dup:
                dup.append(cnt)
            else:
                index = i+1
                break
            
    answer = [(index % n) + 1, (index // n) + 1] if index != -1 else [0, 0]
    return answer
  • 다른 사람의 풀이
def solution(n, words):
    answer = []
    turn = 0
    wordList = [words[0]]

    for idx in range(1, len(words)):
        if words[idx-1][-1] != words[idx][0] or words[idx] in wordList:
            turn = idx
            break
        wordList.append(words[idx])
        
    answer = [turn % n + 1, turn // n + 1]
    if turn == 0:
        answer = [0, 0]
    return answer

 

한 번 지나간 단어들을 wordList라는 리스트에 넣어서 words 배열의 요소를 훑을 때 wordList에 있으면 중복된 단어라고 체크하셨다.. 훨씬 간단한 듯 

728x90
반응형
LIST

'PS > 프로그래머스' 카테고리의 다른 글

[Python] n^2 배열 자르기  (0) 2024.12.09
[Python] 카펫  (1) 2024.11.08
[Python] 구명보트  (0) 2024.11.08
[Python] 점프와 순간 이동  (0) 2024.11.07
[Python] 가장 많이 받은 선물  (0) 2024.11.03