3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.
10진법 | 3x 마을에서 쓰는 숫자 | 10진법 | 3x 마을에서 쓰는 숫자 |
---|---|---|---|
1 | 1 | 6 | 8 |
2 | 2 | 7 | 10 |
3 | 4 | 8 | 11 |
4 | 5 | 9 | 14 |
5 | 7 | 10 | 16 |
정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.
1 ≤ n ≤ 100
n | result |
---|---|
15 | 25 |
40 | 76 |
입출력 예 #1
15를 3x 마을의 숫자로 변환하면 25입니다.
입출력 예 #2
40을 3x 마을의 숫자로 변환하면 76입니다.
function solution(n) {
let noThree = Array(n*2).fill()
.map((v,i) => i+1)
.filter(v => v % 3 !== 0 && !(v+('')).includes('3'))
return noThree[n-1]
}
숫자를 증가시켜 가며 n번 반복할 방법이 생각나질 않아서 애초에 1씩 증가하는 숫자를 담은 배열을 만든 뒤, 조건에 맞지 않는 값을 필터해 주었다.
function solution(n) {
let arr = [];
let num = 0;
while (arr.length !== n && ++num) {
if (num%3!==0 && !(''+num).includes('3'))
arr.push(num)
};
return arr.pop();
}
특이한 점이라면 값 증가를 while문 조건에서 해 주었다. while문 조건에 쓰는 대신 if 앞부분에 num++이라고 적어 주어도 동일하게 작동한다. 값을 배열에 넣어 준 다음, 값의 길이가 n이 될 때까지 반복해 주었다. 그리고 배열의 마지막 값을 추출해 3x 숫자를 추출해 주었다.