# 문제 원문
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이하의 자연수 입니다.
입출력 예
n / result
1 | 1 |
2 | 2 |
3 | 4 |
4 | 11 |
# 문제 풀이
문제 자체는 어렵다고 보기 힘들지만 처음 풀어 볼때는 생각해야 할 점이 많다. 그로 인해서 시간이 많이 걸리는거 같다.
LEVEL2와 LEVEL1의 차이점은 지문 이해의 어려움인가? 싶은 생각이 들었다. 그리고 LEVEL1의 자릿수 문제와 해당 문제가 맥을 같이 한다는걸 느꼈다. 사실 LEVEL1 숫자 문제들도 진법 변환 따위를 다루었으니 문제 맥락을 이해 하는게 핵심이 아닐까? 주어진 n이 0이 될때 까지 반복하면서 -1 한후 3으로 나눈 나머지를 구한다. (123이 아닌 124 라는 규칙 때문이다.) 그렇게 구해진 숫자들을 기존 숫자들의 앞에 더하면 result를 얻을 수 있는 문제이다.
# 솔루션 플로우
1. 입력 받은 n에서 1을 뺀후 3으로 나눈 나머지 state를 구한다.
2. 입력 받은 n에서 1을 뺀후 3으로 나눈 값을 n으로 대입한다.
3. state를 [1, 2, 4]에 대입하여서 124숫자를 얻는다.
4. 그렇게 얻은 124숫자를 기존 result 문자열 앞에 붙인다.
5. 위의 과정을 n이 0이 되기 전까지 반복한다.
6. 그렇게 얻어진 result를 반환한다.
1. 반복문을 활용한 풀이
function solution(n) {
let result = '';
while (n > 0) {
const state = (n - 1) % 3;
n = parseInt((n - 1) / 3);
result = [1, 2, 4][state] + result;
}
return result;
}
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스][LEVEL2] 짝지어 제거하기 (0) | 2021.08.27 |
---|---|
[프로그래머스][LEVEL2] 기능개발 (0) | 2021.08.26 |
[프로그래머스][LEVEL2] 문자열 압축 (0) | 2021.08.25 |
[프로그래머스][LEVEL1] [1차] 다트 게임 (0) | 2021.08.23 |
[프로그래머스][LEVEL1] [1차] 비밀지도 (0) | 2021.08.23 |