[프로그래머스] LV2. 영어 끝말잇기 - 파이썬

곌로그·2023년 4월 24일
0

[python]코딩테스트

목록 보기
3/34
post-thumbnail

문제 링크


문제 요약

n은 끝말잇기를 진행하는 사람의 수이고 words는 순서대로 사람들이 말한 단어들에 해당한다. 이때, 단어의 길이가 2보다 작으면 안된다.

끝말잇기이기 때문에 당연히 앞 사람이 말한 앞의 단어의 끝 문자열과 그 다음 사람이 말한 단어의 앞 문자열이 같아야한다. 그렇지 않다면 몇 번째 사람이 몇 번째 turn에서 틀렸는지 바로 반환해준다.

혹은 이전에 끝말잇기를 진행하면서 나온 적이 있는 단어를 말하면 그 때도 위와 같이 끝말잇기를 멈추고 값을 반환한다.


문제 풀이

import math 

def solution(n, words):
    #n 은 사람 수 words는 말한 단어들
    visited=[]
    answer = []
        
    for i in range(0,len(words)):
        if(len(words[i]) < 2):
        #단어의 길이가 2보다 작다면 
            wrong = ((i)%n)+1
            answer.append(wrong)
            #math 라이브러리의 "올림" 이용
            turn = math.ceil(i/n)
            answer.append(turn)
            return answer            
        
        elif(i!=(len(words)-1) and words[i][-1] != words[i+1][0] and words[i] not in visited):
        	#visited 리스트에도 존재하지 않는 단어이면서 앞단어의 끝 문자열과 뒷 단어의 앞 문자열이 달라 끝말잇기가 성리하지 않는 경우 
            #끝말잇기 i+1 번째 인덱스에서 실패한 경우 
            wrong = ((i+1)%n)+1
            answer.append(wrong)
            turn = math.ceil((i+2)/n)
            answer.append(turn)
            return answer   
        #말한 적이 있는지            
        elif words[i] in visited:
            wrong = ((i)%n)+1
            answer.append(wrong)
            turn = math.ceil((i+1)/n)
            answer.append(turn)
            return answer
        elif words[i] not in visited:
        #말한 적이 없는 단어
            visited.append(words[i])

    #어떠한 조건에도 해당하지 않는다.    
    answer = [0,0]
    
    return answer

📌 고려해야할 점

    딱히 생각해내서 풀어야하는 알고리즘이 존재하는 것 같지는 않다. 조건들을 잘 판단하고 언제 바로 answer를 return 해주는지가 관건이다.

0개의 댓글