Just Fighting
[프로그래머스] 124 나라의 숫자 본문
https://programmers.co.kr/learn/courses/30/lessons/12899
< 문제 설명 >
숫자를 이런식으로 표현하는 나라가 있다.
주어진 숫자 n을 124 나라 식으로 바꿔서 리턴해라.
< 문제 이해 >
먼저 규칙을 찾았다.
1 -> 1
2 -> 2
3 -> 3
4 -> 3 * 1 + 1
5 -> 3 * 1 + 2
6 -> 3 * 1 + 3
7 -> 3 * 2 + 1
8 -> 3 * 2 + 2
9 -> 3 * 2 + 3
10 -> 3 * 3 + 1
11 -> 3 * 3 + 2
12 -> 3 * 3 + 3
반복되는 패턴을 찾자면 3개씩 끊어서 생각할 수 있다. 123이 계속 반복되는 구조.
그래서 2진법을 구하는 방법을 3으로 바꿔서 적용했다.
그러나 1,2,3은 3으로 나눈 나머지가 1,2,0이기 때문에 n-1을 해줘야겠다고 생각했다.
1,2,3 -> 0,1,2 => 3으로 나눈 나머지 0,1,2
4,5,6 -> 3,4,5 => 3으로 나눈 나머지 0,1,2
그리고 나온 0,1,2 대신에 1,2,4를 넣어주면 되겠다고 생각했다.
< 문제 풀이 >
n -= 1을 처음에 한번만 해주었다. 그랬더니 답이 맞질 않았다.
예시 하나를 알고리즘대로 계산해보다가 계속해서 n-1을 해줘야했다는 것을 깨달았다.
num = [1,2,4] 이고 , n = 7 인 경우,
(7-1) % 3 = 0, num[0] = 1, (7-1) // 3 = 2 까지 했을 때 1의자리는 맞았다.
그 뒤에는 2 % 3 = 2 였기 때문에 num[2] = 4가 되어 41의 값이 된다. 그래서 여기서도 n -= 1을 해보았다.
(2-1) % 3 = 1, num[1] = 2, (2-1) // 3 = 0,
answer = str(num[1]) + str(num[0]) = 21
값이 일치하는 것을 알 수 있었다.
def solution(n):
answer = ''
num = [1,2,4]
while n > 0:
n -= 1
answer = str(num[n%3]) + answer
n = n // 3
return answer
'Algorithm > 코딩테스트 연습' 카테고리의 다른 글
[프로그래머스] 짝지어 제거하기 (0) | 2022.02.06 |
---|---|
[프로그래머스] 기능개발 (0) | 2022.02.05 |
[프로그래머스] 멀쩡한 사각형 (0) | 2022.02.03 |
[프로그래머스] 실패율 (0) | 2022.01.31 |
[프로그래머스] 순위 검색 (0) | 2022.01.26 |