[프로그래머스] [3차] n진수 게임
사용 언어: Python3
문제
풀이
나의 풀이
dic = {0:'0', 1:'1', 2:'2', 3:'3', 4:'4', 5:'5', 6:'6', 7:'7', 8:'8', 9:'9', 10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'}
def solution(n, t, m, p):
# target을 N진수로 바꾸기
def change(target, N):
res = ''
while target >= N:
res += dic[target % N]
target //= N
res += dic[target]
return res[::-1]
number = '' # n진수 문자열
i = 0
while True: # 숫자들을 n진수 문자열 나타내기 (필요한 만큼만)
number += change(i, n)
if len(number) >= m * t:
break
i += 1
ans = '' # 튜브가 말할 답
for i in range(p - 1, t * m, m):
ans += number[i]
return ans
- 테스트 케이스: 통과
- 제출 결과: 통과
2<=n<=16
이므로10
~15
를A
~F
로 나타내기 위해 딕셔너리로 정의하면 편하다!change()
라는 함수로target
을n
진수로 바꾼다.- 이때 위에서 정의한 딕셔너리를 사용해
10
~15
를A
~F
로 나타낸다.
- 이때 위에서 정의한 딕셔너리를 사용해
n
진수로 바꾼 문자열을number
라고 할 때,len(number)
가m * t
보다 작은 동안에 계속해서 0부터의 숫자들을 n진수로 바꿔number
문자열에 이어붙인다.number
문자열이 완성되었다면for i in range(p-1, t*m, m)
으로 순회하며 튜브가 말할 답을 세팅한다.
나의 풀이 (개선된 풀이)
def solution(n, t, m, p):
arr = '0123456789ABCDEF' # ✅ 딕셔너리 대신 문자열로 나타낼 수도 있다!
def change(target, N):
res = ''
while target >= N:
res += arr[target % N] # ✅
target //= N
res += arr[target] # ✅
return res[::-1]
number = '' # n진수 문자열
i = 0
while True: # 숫자들을 n진수 문자열 나타내기 (필요한 만큼만)
number += change(i, n)
if len(number) >= m * t:
break
i += 1
ans = '' # 튜브가 말할 답
for i in range(p - 1, t * m, m):
ans += number[i]
return ans
- 테스트 케이스: 통과
- 제출 결과: 통과
💛 개인 공부 기록용 블로그입니다. 👻