- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/68935
Level 1 문제이고, 스스로 푼 문제다!
문제에서 헷갈렸던 게, 3진법 진행 순서와 배열의 진행 순서가 반대라는 것이다.
배열에서는 가장 왼쪽이 0 인덱스지만, 3진법에서는 가장 오른쪽에 있는 수는 3 ** 0 을 곱해야하기 때문이다
1.
몇 번까지 진행해야하는지 모르니까 while문으로 n을 나눌 수 있는 가장 큰 3의 제곱수를 찾은 다음
거꾸로 for문을 진행하면서 n의 3진법을 three 리스트에 구현한다
2.
three 배열을 거꾸로 진행하면서 flipped 배열에 추가한다 (.sort(reverse = True) 는 1200 을 0021이 아닌 2100으로 바꿔서 안된다)
3.
flipped의 원소들 또한 거꾸로 진행하면서 3의 제곱수를 곱해서 다 더한 값을 answer로 반환한다
일일이 순서대로 진행했는데, 뭔가 큐나 스택의 특성을 이용하면 더 빨리 풀 수 있을 것 같다
- 정답 풀이 :
def solution(n):
answer = 0
mul= 0
while True:
if n // (3 ** mul) == 0:
mul -= 1
break
mul += 1
three = []
for i in range(mul, -1 , -1):
num = n // (3 ** i)
three.append(num)
# 제곱수의 몫까지 곱해서 빼주기
n -= (3 ** i) * num
flipped = []
for i in range(len(three) - 1, -1, -1):
flipped.append(three[i])
for i in range(len(three) - 1, -1, -1) :
answer += flipped[i] * (3 ** (len(three) -1 - i))
return answer
'프로그래머스 > Level1' 카테고리의 다른 글
[월간 코드 챌린지 시즌1 / 프로그래머스] 68644번 : 두 개 뽑아서 더하기 (0) | 2022.08.24 |
---|---|
[Summer/Winter Coding(~2018) / 프로그래머스] 12982번 : 예산 (0) | 2022.08.24 |
[해시 / 프로그래머스] 42576번 : 완주하지 못한 선수 (1) | 2022.08.23 |
[2019 KAKAO BLIND RECRUITMENT/ 프로그래머스] 42889번 : 실패율 (1) | 2022.08.23 |
[완전탐색 / 프로그래머스] 42840번 : 모의고사 (0) | 2022.08.20 |