-
[Programmers] 124 나라의 숫자programing/Algorithm 2021. 4. 18. 22:54
124 나라의 숫자
연습 문제
level 2
풀이
이 문제가 제일 짜증나는 점은, 문제의 조건이 자연수만 있다는 점이다.
일반적 진법에는 0을 포함하기 때문에 0, 1, 2, 10, 11, 12, 20, ... 이런식으로 진행되는 반면에, 문제는 1, 2, 4, 11, 12, 14, 21, ... 이런식으로 진행된다는 점이 까다롭다.
conversion = { 0: 4, 1: 1, 2: 2, 3: 4, } def getNum(decimal, _str): if (decimal <= 3): _str = '{0}{1}'.format(conversion[decimal], _str) return _str quotient = decimal // 3 remainder = decimal % 3 _str = '{0}{1}'.format(conversion[remainder], _str) return getNum(quotient, _str) def solution(n): answer = getNum(n, '') return answer
그래도 일단 반복 혹은 재귀를 통해 진법 문제와 유사한 형식으로 작성했다.
결과는 다음과 같다.
1 1
2 2
3 4
4 11
5 12
6 24
7 21
8 22
9 44
10 41...
위 결과에서 주목할 점은, 3보다 큰 3의 배수가 오답이라는 점이다.
사실 나는 위 코드를 작성할 당시, 저 부분만 문제가 있다는 것을 인지하지 못해서 삽질을 많이 했다.
conversion = { 0: 4, 1: 1, 2: 2, 3: 4, } def getNum(decimal, _str): if (decimal <= 3): _str = '{0}{1}'.format(conversion[decimal], _str) return _str quotient = decimal // 3 remainder = decimal % 3 if remainder == 0: quotient -= 1 _str = '{0}{1}'.format(conversion[remainder], _str) return getNum(quotient, _str) def solution(n): answer = getNum(n, '') return answer
6, 9, 12 처럼 3보다 큰 3의 배수들의 경우, 몫(
quotient
) 가 자신이 속해야 할 그룹을 벗어나버리는 것이 문제이기 때문에, 1씩 감소시켜 보정을 해주면 정상적으로 작동한다.'programing > Algorithm' 카테고리의 다른 글
[Programmers] 음양 더하기 (0) 2021.05.23 [programmers] 약수의 개수와 덧셈 (0) 2021.05.15 [Programmers] [1차] 다트 게임 (0) 2021.04.11 [Programmers] 비밀지도 (0) 2021.04.04 [Programmers] 실패율 (0) 2021.03.28 댓글