문제 확인
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
- 숫자들을 미리 N 진법으로 변환한 뒤, 대답 여부는 1 글자 씩 읽어서 확인했다.
- 튜브가 대답할 순서는 나머지를 통해서 확인했다.
# 10 이상 부터는, 한 자리씩 말하기!
# 자신이 말해야할 번호만 출력하면 됨
# n 진법으로 변환하기
def get_nbase(n: int, i: int) -> str:
nbase = ""
over_10 = {10 : "A", 11 : "B", 12 : "C", 13 : "D", 14 : "E", 15 : "F"}
while i:
q, r = divmod(i, n)
# 초기화
i = q
if r in over_10:
r = over_10[r]
nbase += str(r)
return nbase[::-1]
def solution(n, t, m, p):
# 튜브의 대답
answer_list = []
# n 진법 정보
nbase_list = ["0"]
# 미리 n진법 숫자 구해두기
for i in range(1, t * m):
nbase_list.append(get_nbase(n, i))
# N 진수 게임 시작
cnt = 0
for num in nbase_list:
# 1 글자씩
for digit in num:
# 튜브 순서일 경우
if cnt % m == p - 1:
answer_list.append(digit)
cnt += 1
# 게임 끝
if cnt >= t * m:
break
if cnt >= t * m:
break
return "".join(answer_list)