[Algorithm] 124 나라의 숫자
서른 다섯 번째 포스팅
안녕하세요! 서른 다섯 번째 포스팅으로 찾아뵙게 되어 반갑습니다!♥
오늘의 포스팅 내용은 프로그래머스 - 124 나라의 숫자에 관한 내용입니다.
자세한 내용을 알아보러 갑시다❗️
[Boongranii] Here We Go 🔥
1️⃣ 문제
💨 문제 설명
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은 50,000,000이하의 자연수 입니다.
💨 입출력 예
n | result |
---|---|
1 | 1 |
2 | 2 |
3 | 4 |
4 | 11 |
※ 공지 - 2022년 9월 5일 제한사항이 수정되었습니다.
2️⃣ 문제 풀이
🔥 문제 풀이
- 일의 자리는 1 2 4 반복
- 십의 자리는 1 2 4 한 사이클이 돌면 1 2 4 사이클이 붙음.
- 문자열로 1, 2, 4를 일정하게 붙여주면 됨.
1
2
3
4
5
6
7
8
9
10
11
function solution(n) {
let answer = "";
const world = ["4", "1", "2"]; // 인덱스를 생각하면 1번 자리에 1로 시작해야 함.
while (n > 0) {
answer = world[n % 3] + answer;
n = Math.floor((n - 1) / 3);
}
return answer;
}
이 문제는 규칙성만 찾으면 된다.
10진법 | 124나라의 숫자 |
---|---|
1 | 1 |
2 | 2 |
3 | 4 |
4 | 11 |
5 | 12 |
6 | 14 |
7 | 21 |
8 | 22 |
9 | 24 |
10 | 41 |
11 | 42 |
12 | 44 |
13 | 111 |
14 | 112 |
15 | 114 |
16 | 121 |
17 | 122 |
18 | 124 |
19 | 141 |
20 | 142 |
21 | 144 |
22 | 211 |
23 | 212 |
24 | 214 |
25 | 221 |
26 | 222 |
27 | 224 |
28 | 241 |
29 | 242 |
30 | 244 |
규칙성을 파악하기 위해 대충 여기까지 노트에 적어보면서 풀었다.
일단 일의 자리는 1, 2, 4 가 계속 반복되므로 배열 안에 넣고 나머지에 따른 식을 통해 변수에 저장하면 됐다. 배열에서 “4”부터 시작하는 이유는 인덱스는 0번부터 시작하고, 숫자는 1부터 시작하기 때문이다.
3개 단위로 십의 자리 수가 같다는 것을 파악할 수 있다. 3개 단위로 몫은 결국 같다는 것이고 그 몫을 n에 저장하여 배열에서 이어 붙일 수를 찾아 내면 된다.
문제 자체는 미친듯이 단순했다. 솔직히 규칙 찾는 것도 단순했다. 그 규칙을 어떻게 적용하는 지가 어려운 것 같다.
🔥 어떤 천재의 풀이
1
2
let $,
solution = ($ = (n) => (n-- > 0 ? $((n / 3) ^ 0) + (1 << n % 3) : ""));
놀랍게도 저 풀이가 끝이다. 같은 언어가 맞나 싶은 정도의 풀이고 그냥 javascript를 통달한 사람인 것 같다. 멋있다. 멋있는건가. 멋있긴 하지.
반응도 맛있다. 저런 반응 맛보려고 천재할 수도..
3️⃣ 느낀점
문제가 짧고 단순할수록 문제 푸는 것이 어려운 것 같다. 문제가 빨리 읽혀서 좋긴 한데 너무 추상적인 느낌이라 어려운 감이 있는 것 같다. 글은 잘 읽혀서 어떻게 풀 지 고민하는 시간이 많아지긴 한다. 문제를 이해하는 데 오래 걸리는 것 보다는 나은 것 같다.
이런 규칙만 찾는 문제는 규칙 찾아서 코드로 옮기기만 하면 된다. 근데 그게 좀 걸렸음. ㅋ
그럼 안녕핑🐌
댓글남기기