728x90
<문제 설명>
https://programmers.co.kr/learn/courses/30/lessons/68935
자연수 n(10진법)을 3진법으로 변환 -> 이 변환 값을 앞뒤 반전 -> 다시 10진법으로 변환
이 것이 이 문제가 요하는 것이다.
입출력의 예는 다음과 같다.
n | result |
45 | 7 |
125 | 229 |
<문제 해결 아이디어>
우선 n을 3진법으로 만드는 과정은 몫이 3보다 작아질 때 까지 나눈 다음 나머지를 1의 자리부터 채우고, 마지막 제일 큰 자리에 몫을 집어 넣으면 된다.
하지만 우리는 어차피 뒤집을 것이기 때문에 String으로 나머지 부터 앞에 더할 것이다.
예) 나머지가 0,0,2 / 몫이 1 일경우 3진법은 1200이지만 저 구한 순서대로 String타입인 변수에 더해주면 0021이라는 뒤집힌 3진수 값이 나온다.
이렇게 뒤집힌 3진수 값이 나오면 이를 반복문으로 다시 10진수로 만들어준다.
<문제 풀이 코드>
def solution(n):
answer = 0
quotient = int(n/3)
result = str(n%3)
if(quotient>=3):
while(quotient>=3):
result += str(quotient % 3)
quotient = int(quotient/3)
result += str(quotient)
for i in range(len(result)):
answer += int(result[i])*(3**(len(result)-1-i))
return answer
ps. 원래 테스트 케이스 1번을 틀렸는데 그게 처음 n 이 3보다 작을 때를 제대로 고려하지 않아 생긴 문제였다.
이를 해결하기 위해 조건문으로 확실히 풀이를 구분해주었다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스 lv 1] 같은 숫자는 싫어.py (2) | 2022.01.17 |
---|---|
[프로그래머스 lv 1] 두 정수 사이의 합.py (0) | 2022.01.13 |
[프로그래머스 lv 1] 내적.py (0) | 2022.01.11 |
[프로그래머스 lv 1] 음양 더하기.py (0) | 2022.01.05 |
[프로그래머스 lv 1] 로또의 최고 순위와 최저 순위.py (0) | 2022.01.04 |