124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
124 나라에는 자연수만 존재합니다.
124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
function solution(n) {
let result = [n]
while(result.filter(e=>{if(e === 1 || e === 2 || e === 3){
return false
} else {
return true
}}).length !== 0 ){
let temp = result[0];
result[0] = temp % 3 ? temp % 3 : 3
if(Math.floor(temp/3)){
result.unshift(Math.floor((temp-1)/3));
}
}
return result.map(e=>e === 3 ? 4 : e).join('')
}
-> 시간 너무 오래걸림
function solution(n){
let result = '',
numbers = [4, 1, 2];
while(n){
result = numbers[n % 3] + result;
console.log(n)
n = n % 3 === 0 ? n/3-1 : Math.floor(n/3)
}
return result;
}
아 이건 진짜 패턴찾아내는게 너무 힘들었다.
3진법으로 써볼 수 있겠는데 이리 저리 자르다가 시간을 얼마나 썼는지.
10진법과 3진법, 124를 차례대로 적어보니까 그제서야 패턴이 눈에 보이기 시작했다.
요는 3진법에서의 0을 124에서 4에 대응시켜주면 되는 문제였다.
그리고 n을 점차 줄여나가는 식으로 마지막으로 n이 없어지면 반복문이 멈추고 result가 반환되는 식으로 써봤다.
1단계라고 너무 가볍게 여겼던 것 같다.
다른 1단계 문제들이 무지성으로 풀리는 문제이다보니 조금 풀어지지 않았나 싶다.
다시 조이고 달리자
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges#