[프로그래머스 Lv2] 영어 끝말잇기(python)

이진규·2022년 3월 8일
1

프로그래머스(PYTHON)

목록 보기
40/64

문제

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

나의 코드

"""
1. 아이디어

2. 시간복잡도

"""

def solution(n, words):
    
    answer = []
    
    num = 0 # 번호
    seq = 0 # 차례
    tmp_word = [] # 단어 중복을 확인하기 위한 임시 단어 모음 리스트
    
    for i in range(len(words)):
        
        if not tmp_word: # 단어 모음 리스트 안이 비었다면 (첫 단어인 경우)
            tmp_word.append(words[i])
            num += 1
            seq += 1
        
        else: # 단어 모음 리스트 안에 단어가 있다면 (두 번째 이후 단어인 경우)
            
            # 이전 단어의 끝 알파벳과 현재 단어의 첫 알파벳이 같고, 단어 모음 리스트 안에 중복이 아니라면
            if tmp_word[i-1][-1] == words[i][0] and words[i] not in tmp_word:
                tmp_word.append(words[i])
                num += 1
                seq += 1
            
            else: # 위의 if 조건을 만족하지 않는 경우
                break
    
    else: # 이 구문이 실행된다는 것은 끝말잇기가 정상적으로 종료된 것을 의미한다.
        return [0, 0]
    
    answer.append(num % n + 1)
    answer.append(seq // n + 1)
    
    return answer
    

설명

편하게 문제 조건에 따라 코드로 구현하면 풀 수 있는 문제이다.

words 리스트를 중심으로 반복문을 돌려 임시 단어 모음 리스트 안에 단어들을 집어넣으면서 중복여부와 끝말잇기 조건이 충족되는지 확인하고 그 과정에서 번호와 차례를 계속 더해주어 마지막에 적절한 연산으로 계산해주면 된다.

다시 풀이한 코드


def solution(n, words):
    
    collection = [] # 사람들이 이미 말한 단어 모음집
    
    for i in range(len(words)):
        
        num = i % n + 1 # 사람의 번호
        order = i // n + 1 # 사람의 차례
        
        if collection: # 만약 단어 모음집에 한 글자라도 있다면
            
            # 직전의 단어 끝 부분과 현재 단어 앞부분을 비교하고 이전 단어들 과의 중복 여부를 체크한다.
            if collection[-1][-1] == words[i][0] and words[i] not in collection:
                collection.append(words[i])
            else: # 위의 if 조건을 충족하지 못한다면 끝말잇기가 종료된다.
                return [num, order]
            
        else: # 단어 모음집에 한 글자라도 없으면 단어를 집어 넣는다.
            collection.append(words[i])
    
    else: # 이 구문이 실행된다는 것은 끝말잇기가 정상적으로 종료된 것을 의미한다.
        return [0, 0]
        

참고자료

X

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글