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

Lee Dong Uk·2023년 5월 8일
0

1. 설계 로직

  • 사용된 단어를 담는 배열(usedWords)과, 직전 단어를 (beforeWord)담을 변수를 선언

  • 문자를 담은 배열을 순회하며 이전에 사용된 단어들과 직전 단어를 비교.
    1. 첫 번째 단어일 경우 usedWords에 단어를 추가하고, beforeWord에 단어를 할당한다.
    2. 현재 단어가 usedWords에 있고, 현재 단어의 첫 번째 알파벳과 직전 단어의 마지막 알파벳이 일치하지 않을 경우(끝말잇기 실패), [실패한 사람의 번호, 차례]를 담는 배열을 반환한다.

    • 실행 횟수 % n -> 실패한 사람의 번호, 0일시 n
    • math.ceil(실행 횟수/n) -> 차례
    1. 현재 단어가 usedWords에 없고 현재 단어의 첫 번째 알파벳과 직전 단어의 마지막 알파벳이 일치할 경우(끝말잇기 성공), usedWords에 현재 단어를 추가하고, beforeWord에 현재를 할당한다.

2. 코드

import math
def solution(n, words):
    usedWords = []
    beforeWord =""
    index = 0
   
    while 1:        
        if index==0:
            usedWords.append(words[index])
            beforeWord =words[index]  
            index = index+1
            continue
        elif len(words) == index:
            return [0,0]
        
        
        curWord = words[index]   
        if usedWords.count(curWord)!=0 or beforeWord[-1] !=curWord[0]:       
            cnt = index+1
            num = n if cnt%n ==0 else cnt%n
            turn = math.ceil(cnt/n)            
            return [num,turn]
        else:
            usedWords.append(curWord)
            beforeWord =curWord
            index = index+1
        
    
    return                          

3. 후기

처음 python으로 풀어본 알고리즘이라 전체적으로 미숙했던 부분이 많았던 것 같다.

익숙해지는 과정이 필요하다.

0개의 댓글