320x100
문제
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
10진법 | 124나라 | 10진법 | 124 나라 |
1 | 1 | 6 | 14 |
2 | 2 | 7 | 21 |
3 | 4 | 8 | 22 |
4 | 11 | 9 | 24 |
5 | 12 | 10 | 41 |
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
처음엔 그냥 3진법으로 변환하면 되지 않을까??해서 왜 level2지 라고 생각했던 문제이다.
여기서 주의해야할 점은, 3진법으로 생각했을때, 3의 경우 10이고, 여기선 그냥 4로 끝나기 때문에 진법 변환을 반복문으로 수행했을 때, 3진법은 반복문이 2번 돌게되고, 124나라는 한번만 돌아야한다.
내가 푼 방법은 3으로 나누어 떨어질 때, n-1을 해주어서 반복문이 한번 덜 돌게 만들어주었다.
(123/456/789/10 11 12 이렇게 3개씩 묶어서 생각을 해야하는데, 이것을 묶는 방법이 3으로 나누었을 때 값을 같게 만들어줘야한다는 사고 과정에서 해당 풀이가 나왔다.)
자세한 이해는 아래 코드!!
def solution(n):
answer = ''
li = []
while n > 0:
if n % 3 == 0:
n = n//3-1
li.append(4)
elif n % 3 == 1:
n = n//3
li.append(1)
else:
n = n//3
li.append(2)
li.reverse()
for st in li:
answer += str(st)
return answer
print(solution(4))
매우 매우 쉬워 보였는데, 생각보다 시간이 오래걸렸던 문제다..
나름 3진법을 응용해서 나온 문제 같아서 재밌었다!
728x90
'알고리즘 > Solving' 카테고리의 다른 글
[BOJ 3190 파이썬] 뱀 (0) | 2022.06.28 |
---|---|
[BOJ 1715 파이썬] 카드 정렬하기 (0) | 2022.06.25 |
[BOJ 11000 파이썬] 강의실 배정 (0) | 2022.06.22 |
[Programmers 파이썬] 기능개발 (0) | 2022.06.22 |
[Programmers 파이썬] 문자열 압축 (0) | 2022.06.22 |