https://school.programmers.co.kr/learn/courses/30/lessons/17687
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 요약
문제에서 정의하는 게임 규칙에 따라서, 숫자들을 n진법으로 변환한 뒤, 튜브의 차례가 왔을 때 어떤 것을 말해야 하는지를 리턴해야 한다.
풀이
먼저 주어지는 수들을 n진법으로 변환해주는 함수 n_convertor를 선언해준다. 그리고 0부터 t*m-1까지의 수를 n진법으로 변환한 시퀀스를 만들어준다. 마지막으로 튜브가 말해야 하는 숫자만을 선별해준다.
# 프로그래머스 N진수 게임 https://school.programmers.co.kr/learn/courses/30/lessons/17687
def solution(n, t, m, p):
def n_converter(x, n):
# n진법에 따른 수를 출력하는 함수
# 11진법 이상의 경우 알파벳으로 치환하여 넣어줘야 한다.
rev_base = ''
while x > 0:
x, mod = divmod(x, n)
if n > 10 and (10 <= mod <= 15):
rev_base += "ABCDEF"[mod % 10]
else:
rev_base += str(mod)
return rev_base[::-1]
# 0을 미리 추가해준다.
# total 변수에는 처음부터 끝까지 숫자를 말하는 순서가 저장된다.
total = '0'
for i in range(1, t*m):
total += n_converter(i, n)
# 튜브가 말해야 하는 숫자만을 선별한다.
# p-1번째부터 시작해서 다음 m번째마다 튜브의 순서가 돌아오며, t*m 번째가 되었을 때 반복문이 종료되도록 한다.
answer = ''
for i in range(p-1, t*m, m):
answer += total[i]
return answer
n진법으로 변환해줄 때 유의해야 할 점은, 11진법 이상인 경우 10~15의 숫자를 알파벳으로 치환해서 반환해줘야 한다는 것이다.
n진법 변환 함수 구현을 익혀두면 유용하게 써먹을 수 있을 것 같다.
728x90
'알고리즘' 카테고리의 다른 글
[백준 1316] 그룹 단어 체커 - 파이썬 풀이 (실버5) (0) | 2023.05.09 |
---|---|
[프로그래머스 단속카메라] - Python 풀이 (0) | 2023.05.08 |
[백준 1865] 웜홀 - Python 풀이 (골드3) (0) | 2023.05.08 |
[프로그래머스] 연속된 부분 수열의 합 (Lv.2) - 파이썬 풀이 (0) | 2023.05.06 |
[백준 13549] 숨바꼭질 3 - 파이썬 풀이 (골드5) (0) | 2023.05.05 |