CodingTest/programmers
[프로그래머스/Programmers] n진수 게임 - Python
ukunV
2021. 11. 12. 18:15
Link
코딩테스트 연습 - [3차] n진수 게임
N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0
programmers.co.kr
Solution
해당 문제를 풀기 위해서는 10진수를 n진수로 변환하는 방법을 필수 적으로 알아야한다.
다음은 기본적인 10진수 -> n진수 변환법이다.
# n: 진수 변환을 위하는 10진수
# q: 변환을 원하는 진수
def solution(n, q):
b = ''
while n > 0:
n, mod = divmod(n, q)
b += str(mod)
return b[::-1]
필자의 풀이는 해당 변환법을 활용하여 해결하였다. 또한 문제의 입력 형식인 진법 n, 구할 숫자의 갯수 t, 게임에 참여하는 인원 m, 튜브의 순서 p의 관계를 파악하는것에 중점을 두었다.
파악한 관계는
- 필요한 전체 답의 길이: t * m
- for i in range(p - 1, len(full), m)
이다.
1번 관계의 경우 의미를 파악해보면 숫자의 갯수 t와 참여하는 인원 m을 곱한 길이만큼만 0부터 해당 진수로 문자열을 구해주면 된다.
2번 관계의 경우 1번에서 구한 문자열에서 해당하는 순서의 문자만 뽑아내는 for문이다. p - 1은 순서를 인덱스에 맞춰 -1을 해준것이고 간격을 m만큼 둠으로써 해당 순서에 알맞은 문자만 뽑아낼 수 있다.
def ten_to_n(n, l):
result = '0'
num_arr = ['A', 'B', 'C', 'D', 'E', 'F']
b = 1
while len(result) < l:
ts = ''
tb = b
while tb > 0:
tb, mod = divmod(tb, n)
if mod >= 10:
ts += num_arr[mod - 10]
else:
ts += str(mod)
result += ts[::-1]
b += 1
return result
def solution(n, t, m, p):
answer = ''
full = ten_to_n(n, t * m)
for i in range(p - 1, len(full), m):
answer += full[i]
if len(answer) == t:
return answer
🔑 key point: 10진수 -> n진수 변환법
📌 Tip: t * m, for(p - 1, len(full), m)