문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/17687
문제 설명
- 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, 열번째 사람은 9를 말한다.
- 10 이상의 숫자부터는 한자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫자리인 1, 열두번째 사람은 둘째 자리인 0을 말한다.
사람들은 좀 더 난이도를 높이기 위해 이진법에서 십육진법까지 모든 진법으로 게임을 진행해보기로 했다. 튜브는 자신이 말해야 하는 숫자를 미리 출력하는 프로그램을 만들려고 한다. 튜브의 프로그램을 구현하라.
입력 형식
진법 n, 미리 구할 숫자의 갯수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다.
- 2 <= n <= 16
- 0 < t <= 1000
- 2 <= m <= 100
- 1 <= p <= m
출력 형식
튜브가 말해야 하는 숫자 t 개를 공백 없이 차례대로 나타낸 문자열. 단, 10 ~ 15는 각각 대문자 A ~ F로 출력한다.
풀이
튜브가 말해야 하는 숫자를 알기 위해 필요한 총 문자열의 길이는 t * m 이므로,
n진수로 변환하는 함수를 통해, 총 문자열의 길이가 t * m이 될 때까지
0부터 시작하여 1씩 늘려가며, 위 조건(문자열의 길이가 t * m)을 충족할 때까지 반복한다.
그 후, p와 m을 통해 슬라이싱하여, 말해야하는 숫자를 출력한다.
✅ Code - 성공
def solution(n, t, m, p):
dict = {10: 'A', 11: 'B', 12: 'C', 13:'D', 14:'E', 15:'F'}
# n진수로 변환하는 함수
def change_t_num(num):
t_num = ''
while num > 0:
if num % n >= 10:
t_num = dict[num % n] + t_num
else:
t_num = str(num % n) + t_num
num //= n
return t_num
total_t_num = '0'
speak_num = 1
while len(total_t_num) < t * m:
total_t_num += change_t_num(speak_num)
speak_num += 1
answer = total_t_num[(p-1) : t * m : m]
return answer
'알고리즘 문제 > 프로그래머스_Lv2 도장깨기' 카테고리의 다른 글
[프로그래머스] 다리를 지나는 트럭 (Python) (0) | 2024.03.21 |
---|---|
[프로그래머스] 전화번호 목록 (Python) (0) | 2024.03.18 |
[프로그래머스] 파일명 정렬 (Python) (0) | 2024.02.26 |
[프로그래머스] 압축 (Python) (1) | 2024.01.30 |
[프로그래머스] 방금그곡 (Python) (1) | 2024.01.23 |