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번 인덱스에 저장하였다.
'알고리즘(Python)' 카테고리의 다른 글
[프로그래머스 LV.2] 점프와 순간 이동 (2) | 2023.11.24 |
---|---|
[프로그래머스 LV.2] 피보나치 수 (2) | 2023.11.22 |
[프로그래머스 LV.2] 다음 큰 숫자 (2) | 2023.11.22 |
[프로그래머스 LV.2] 더 맵게 (0) | 2023.09.20 |
알골 3번(Python) - 최소공배수, 최대공약수 구하기 (백준 2609번) (0) | 2021.09.04 |