문제
진법 n, 미리 구할 숫자의 갯수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다.
- n: 진법 (2 ≦ n ≦ 16)
- t: 미리 구할 숫자의 갯수 (0 < t ≦ 1000)
- m: 게임에 참가하는 인원 (2 ≦ m ≦ 100)
- p: 튜브의 순서 (1 ≦ p ≦ m)
풀이 과정
풀이 시간: 10분
알고리즘: 단순 구현
1. 변환한 숫자를 모두 합친 문자열의 길이가 최소 t * m이 될 때까지 순서대로 숫자를 n진수로 변환해 추가해준다.
2. 변환된 숫자(문자열)에서 튜브의 순서가 돌아올 때마다의 값을 출력한다.
시간 복잡도: O(t*m)
코드
# number(10진수)를 base진수로 변환하는 함수
def convert(number: int, base: int) -> str:
"""
number: 변환할 숫자(10진수)
base: 변환할 진수
"""
nums = '0123456789ABCDEF'
q, r = divmod(number, base) # 몫, 나머지
if q == 0:
return nums[r]
else:
return convert(q, base) + nums[r]
def solution(n: int, t: int, m: int, p: int) -> str:
"""
n: 변환할 진법
t: 미리 구할 숫자의 개수
m: 게임에 참가하는 인원
p: 튜브의 순서
"""
converted_nums = ''
i = 0 # 숫자는 0부터 시작
# 필요한 숫자만큼 변환하여 converted_nums에 저장
while len(converted_nums) < t * m:
converted_nums += convert(i, n) # i를 n진수로 변환
i += 1
return converted_nums[p-1:t*m:m] # 튜브의 순서가 돌아올 때마다 출력
'PS > Programmers' 카테고리의 다른 글
[Level 3] 표현 가능한 이진트리(Python) (0) | 2024.06.08 |
---|---|
[Level 2] 혼자서 하는 틱택토(Python) (0) | 2024.06.02 |
[Level 3] 단어 변환(Python) (1) | 2023.09.07 |
[Level 2] 더 맵게(Python) (0) | 2023.09.07 |
[Level 2] 주차 요금 계산(Python) (0) | 2023.09.06 |