<[3차] n진수 게임>
문제(출처: https://school.programmers.co.kr/learn/courses/30/lessons/17687)
문제 풀이
- my solution
def solution(n, t, m, p):
answer = ''
tempstr = '0'
i=1
dic={10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'} # 10~15는 각각 대문자 A~F로 출력
# n진법 구하기
while True:
temp = ''
k = i
while True:
x, y = divmod(k, n)
if y >= 10: # 10 이상이면 A~F로 출력
temp += dic[y]
else: # 나머지 문자열로 출력
temp += str(y)
k = x
if x <= 0: #끝
break
i+=1
tempstr+=temp[::-1] # 뒤집어서 추가
if len(tempstr)>=(t*m): # 자리수만큼
break
for i in range(len(tempstr)): # 자기 차례에 말할 숫자
if i%m==p-1:
answer+=tempstr[i]
if len(answer)==t:
break
return answer
진법 변환!! 찾아보니 divmod로 몫과 나머지를 구해 n진법으로 하길래...
divmod를 사용하여 문제를 해결해보았다.
1) 숫자 몇까지 n진법으로 구하란 말 대신 길이를 알려주었으므로 while 문을 사용
1-1) 숫자 k를 n진법으로 나타내기 위해 divmod를 실행해야 하므로 while문 사용
① 10 이상이면 dic에 미리 저장해둔 값을 문자열에 넣고, 10보다 작으면 그 값을 그대로 문자열에 넣음
② 종료 조건: 몫이 0보다 작거나 같은 경우
1-2) 나머지로 구한 n진법은 뒤집어서 추가
1-3) 종료 조건: 문자열의 길이가 (미리 구할 숫자의 개수) * (게임에 참가하는 인원) 이상일 경우
2) 숫자 k를 n진법으로 변환한 문자열을 반복문을 통하여 자기 차례에 말할 숫자만 answer에 추가
생각🤔
내가 생각하기에 이 문제의 포인트는
1) 숫자 k를 n진법으로 변환하는 방법
2) 미리 구할 숫자의 개수만큼 구하는 방법
이었던 것 같다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'🌞Algorithm > 🔥programmers' 카테고리의 다른 글
| [programmers] 베스트앨범 (0) | 2021.09.10 |
|---|---|
| [programmers] 방문 길이 - Summer/Winter Coding(~2018) (1) | 2021.09.09 |
| [programmers] 괄호 회전하기 - 월간 코드 챌린지 시즌2 (0) | 2021.09.07 |
| [programmers] 괄호 변환 - 2020 KAKAO BLIND RECRUITMENT (0) | 2021.09.06 |
| [programmers] [3차] 파일명 정렬 - 2018 KAKAO BLIND RECRUITMENT (0) | 2021.09.04 |