728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12899
어떤 10진수 n을 1, 2, 4로만 구성된 수로 바꾸는 문제
기본적으로 1, 2, 4로 이루어진 3진법이지만 0과 3이 없다는 것에 중점을 둬야 한다.
전략
01. 규칙찾기
전략이라기보다 기본적인 3진법에서는 1, 2, 10, 11, 12, 20, 21, 22, 100, 101, 102, ... 이런 식으로 증가해 간다면 124나라에서는 1, 2, 4, 11, 12, 14, 21, 22, 24, 41, 42, 44, 111, 112, 114, ...로 증가한다.
10진법 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
3진법 | 1 | 2 | 10 | 11 | 12 | 20 | 21 | 22 | 100 |
124나라 | 1 | 2 | 4 | 11 | 12 | 14 | 21 | 22 | 24 |
보면 3의 배수일 때만 차이가 있는 걸 알 수 있고, 124나라에는 0이 없기 때문에 작은 자리수가 0일 때 대신 위의 자리수에서 가장 큰 수인 4를 빌려오는 규칙이 있다.
풀이
def solution(n):
answer = ''
while n > 0:
share, rem = n // 3, n % 3
if rem == 0:
answer += '4'
n = share - 1
else:
answer += str(rem)
n = share
return answer[::-1]
변환한 수를 차례로 저장할 answer 문자열 변수를 만들고, 기본적인 진법 변환 코드를 짠다. n이 0이 아닐 때 3으로 나눈 몫과 나머지를 share, rem으로 각각 저장하고, 만약 나머지가 0일 경우 0대신 4를 answer에 추가하고 몫에서 1를 빼준다.
이런 식으로 반복하면 10진수를 124나라 진법으로 변환할 수 있다.
반응형
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[코딩테스트] 2021 Dev-Matching: 웹 백엔드 개발자(상반기)다단계 - 칫솔 판매 (0) | 2023.08.17 |
---|---|
[코딩테스트] 연습문제 - 무인도 여행 (0) | 2023.08.09 |
[코딩테스트] 연습문제 - 햄버거 만들기 (0) | 2023.08.09 |
[코딩테스트] 연습문제 - 뒤에 있는 큰 수 찾기 (0) | 2023.08.06 |
[코딩테스트] 스택/큐 - 다리를 지나는 트럭 (0) | 2023.08.04 |