📖 문제
🧑🏻💻 풀이 과정
1) 문제 이해 및 접근
튜브가 몇번째 순서일때마다 말을 해야하는지 순서를 구해주었습니다.
숫자들을 n진수로 변화하여 사람들이 외칠 한자리씩 나누어 리스트에 저장하였습니다.
2) 풀이 코드
사용 언어 - Python
from collections import deque
def solution(n, t, m, p): # 변경해야할 진법, 구해야할 정답의 개수, 게임 참여 인원, 튜브의 순서
answer = [] # 정답 리스트
turns = [] # 튜브가 말해야할 순서
converted = ['0'] # 변경된 진법이 한자리씩 저장되는 리스트
def convert(num): # 변환 함수
result = deque()
while num > 0: # 0보다 크다면
if num%n >= 10: # 나머지가 10 보다 크거나 같으면
result.appendleft(str(chr(55 + num%n))) # 알파벳 코드값 추가
else: # 나머지가 10 보다 작다면
result.appendleft(str(num % n)) # 숫자 추가
num //= n
converted.extend(result) # 변경된 숫자의 리스트에 추가
for i in range(t): # 튜브의 말해야하는 턴을 모두 구함
turns.append(i*m+p-1)
num = 0
while len(converted) <= max(turns): # 튜브가 만들어야하는 턴까지 값을 못 구했다면
convert(num) # 10진수 수를 넣어서 진번 변환
num += 1
for i in turns: # 튜브가 말해야 할 턴을 모두 반복
answer.append(converted[i]) # 정답에 추가
return ''.join(answer)
📝 결과 및 학습한 내용
1) 어려웠던 내용
특별히 없습니다.
2) 새롭게 학습한 내용
특별히 없습니다.
🔗 문제 링크
- https://programmers.co.kr/learn/courses/30/lessons/17687
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > Python' 카테고리의 다른 글
[백준] 12015 가장 긴 증가하는 부분 수열 2 (0) | 2022.03.08 |
---|---|
[프로그래머스] 기둥과 보 설치 (0) | 2022.03.07 |
[프로그래머스] 메뉴 리뉴얼 (0) | 2022.03.05 |
[백준] 1002 터렛 (0) | 2022.03.04 |
[백준] 2268 수들의 합 7 (0) | 2022.03.03 |
댓글