https://programmers.co.kr/learn/courses/30/lessons/12899?language=python3
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 함수를 완성해 주세요.
제한사항
- n은 500,000,000이하의 자연수 입니다.
처음 문제 해석 및 풀이 방법
1. 3진법이라 생각되어 3진법으로 변환한 후 거기 값에 맞는 (1이면 1, 2이면 2, 3이면 4) 값을 문자열로 추가함.
2. 반복문을 통해 자릿수를 변경하면서 n%3을 통해 그 자릿수의 들어갈 값을 넣어준다.
3. n//3을 통해 자릿수를 변경한다(만약 십진수면 n//10하면백의자리-> 십의자리 ->일의자리)
4. return 값으로 answer을 반환한다.
내가 작성한 소스코드
def solution(n):
answer = ''
while n > 0: #n이 없어질때까지
n -= 1 # n 1차감
value = n%3 # 3진법이므로 n을 3으로 나눈 나머지를 계산
if value == 0:
answer = '1' +answer
elif value == 1:
answer = '2' +answer
elif value == 2:
answer = '4' +answer
n //= 3 #자릿수 내림
return answer
while문을 통해 n을 -1씩 차감하고 그 값에 3을 나눈 나머지를 구해 나머지가 1이면 1, 2면 2, 3이면 4를 최상단 문자열에 추가한다.(큰숫자부터 하기 때문) 그후 n //=3을 통해 자릿수를 한칸 내린다.
결론 및 고찰
문제를 보자말자 3진법을 이용하여 푸는 것을 알았으나 처음에는 내가 주의깊게 생각하지 않은 나머지 n//3 으로만 값을 구해 이상한 값이 나와서 고민을 했었다. 그래서 코드를 다 지워보기도 하며 고민을 하다 자릿수를 내리는 방법에 대해 검색했고 현재 값에 -1을 하는 것이 올바른 것을 찾아냈다. 그리고 이 문제에 대해 고민을 하면서 더 짧은 방법이 있을 것 같아 구글링 해본 결과if 문을 사용하지 않고 answer = num[n % 3] + answer 문장으로만 값을 정하는 정말 간단한 방법이 있었다.
'코딩테스트 연습' 카테고리의 다른 글
프로그래머스 로또의 최고 순위와 최저 순위 Level 1 (0) | 2021.08.13 |
---|---|
프로그래머스 문자열 압축 Level 2 (0) | 2021.08.12 |
프로그래머스 멀쩡한 사각형 Level 2 (0) | 2021.08.07 |
프로그래머스 오픈채팅방 Level 2 (0) | 2021.08.05 |
프로그래머스 짝지어 제거하기 Level 2 (0) | 2021.08.05 |
댓글