[프로그래머스] N진수 게임 (2018 KAKAO BLIND RECRUITMENT)
미리 0부터 15까지에 대응하는 숫자 or 알파벳을 딕셔너리 d
에 저장해둔다.
그리고 문자열 s
에 모든 사람이 말하는 숫자를 저장하고 거기에서 튜브가 말해야하는 숫자만 리턴하도록 코드를 구현한다.
solution()
의 while문
'10진법 -> n진법'으로 변환하는 함수 convert(진법, 숫자)
를 호출하고 반환값을 계속 s
에 이어붙인다.
s
의 길이가 t * m
이하일 동안 num
을 하나씩 증가시키면서 반복한다.
convert(n, num)
함수
십진수 num
을 n
진법으로 변환해준다.
ans
에 값이 거꾸로 저장되기 때문에 반활할 때 뒤집어서 반환해준다.
마지막으로 문자열 s
에서 슬라이싱을 활용해
튜브의 차례인 p-1
번째(인덱스는 0부터 시작하므로)부터 인원수 m
씩 건너뛰면서 값을 뽑는다.
이 때 t
개의 숫자만 뽑아낼 수 있도록 인덱스의 종료값을 t * m
로 한다.
d = {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 convert(n, num):
ans = ''
while num:
ans += d[num%n]
num //= n
return ans[::-1]
def solution(n, t, m, p):
s = '0'
num = 0
while len(s) < t * m:
s += convert(n, num)
num += 1
return s[p-1:t*m:m]