본문 바로가기

알고리즘(Python)

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

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

 

프로그래머스

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

programmers.co.kr

 

전체 코드

import math

def solution(n, words):
    spend = []
    for i, word in enumerate(words):
        spend.append(word)
        if len(spend) > 1:
            if (spend[-2][-1] != spend[-1][0]) or spend.index(word) != len(spend) -1 :
                return [n if (i+1) % n == 0 else (i+1) % n, math.ceil((i+1)/n)]

    return [0,0]

 

알고리즘 설명

list와 math 라이브러리를 사용하였다.

 

코드 설명

반복문을 통해 words에 들어있는 단어를 spend list에 순서대로 추가하였다.

만약 추가한 word의 시작 알파벳이 이전 단어의 끝 알파벳과 다를 경우, 또는 spend의 앞부분에 word와 동일한 단어가 있는 경우 정답에서 원하는 형태의 정답을 출력한다.

정답에서 원하는 답의 형태는 다음과 같다.

[가장 먼저 탈락하는 사람의 번호, 탈락한 차례]

 

index 0 : 가장 먼저 탈락하는 사람의 번호

가장 먼저 탈락하는 사람의 번호는 (i + 1)% n으로 구할 수 있다. ( i : words의 index)

만약 연산한 값이 0이라면 n번째 사람이 탈락한 것이므로 n을 list의 0번 인덱스에 저장하였다.

 

index 1 : 탈락한 차례

탈락한 차례는 나눗셈 연산을 통해 구할 수 있다.

만약 3명이 게임을 진행한다고 가정했을 때, 첫 번째 사람은 i = 0,3,6,9,... 일 때 1,2,3,4... 번째 차례이다.( i : words의 index)

math.ceil 함수를 통해 나눗셈을 진행한 뒤 나머지를 올림 처리하여 몇 번째 차례인지 구한 후 list의 1번 인덱스에 저장하였다.