프로그래머스

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

진철 2023. 2. 1. 22:34
728x90
반응형

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12981

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제를 간략히 요약하자면 다음과 같다.

n명의 사람이서 영어로 끝말잇기를 할 때, 중복된 단어를 언급하거나 올바르지 않은 단어를 언급하면 해당 사람은 탈락하게 된다.

이 때, 몇 번째 사람이 몇 번째 순서에서 탈락하는지 반환하면 된다.

 

코드를 작성하기 위한 순서는 다음과 같다.

1. 올바르지 않은 단어를 말했을 때와 중복된 단어를 말했을 때를 구분하여 준다.

2. 언급한 단어를 담을 리스트와 

import math

def solution(n, words):
    answer = []
    dap=[] #단어가 중복되었는지 알아내기 위한 리스트
    rr=[] #올바른 단어인지 알아내기 위한 리스트
    cnt=0 #순서를 구하기 위한 변수
    for i in words:
        cnt+=1
       #1번 : 올바르지 않은 단어인지 검사하기.
        if not rr: #리스트가 비어있는 경우, 언급된 단어가 없으므로 리스트에 마지막 알파벳을 넣어준다.
            rr.append(i[-1])
        else:
            if i[0]!=rr[-1]: #단어가 올바르지 않은 경우이다.
                if cnt%n==0: #만약 3명인데, 3번째 사람이 걸린 경우, n==0이기 때문에 따로 구분해준다.
                    answer.append(n)
                else:answer.append(cnt%n) #몇 번째 사람인지 answer에 담는다.
                answer.append(math.ceil(cnt/n)) #몇 번째 순서인지 answer에 담는다.
                return answer
            else:
                rr.append(i[-1]) #올바른 단어이면 리스트에 계속 넣어준다.

       #1번 : 중복된 단어인지 검사하기.
        if not dap:
            dap.append(i)
        else:
            if i in dap:
                if cnt%n==0:
                    answer.append(n)
                else:answer.append(cnt%n)
                answer.append(math.ceil(cnt/n))
                return answer
            else:
                dap.append(i)
                
    if not answer: #탈락자가 없는 경우이다.
        answer.append(0)
        answer.append(0)

    return answer
728x90
반응형