Algorithm/프로그래머스
[프로그래머스 / JS] Lv. 0 저주의 숫자 3
OnnJE
2022. 12. 13. 12:58
반응형
문제 설명
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
풀이
function solution(n) {
while (true) {
let arrConvN = new Array(2 * n).fill(0).map((ele, idx) => idx + 1)
.filter(ele => !((ele % 3 === 0) || (String(ele).includes('3'))));
if (arrConvN.length >= n) return arrConvN[n-1]
else n *= 2
}
}
사고과정
- 변환의 규칙성을 찾기 힘들 것 같다
- 1부터 차례대로 숫자를 늘려가며 3과 관련된 수인지 판단하고 변환값을 다른 변수에 저장해가면서 n에서의 변환값을 찾아보자
- 아 조건에 따라 구현하기 겁나게 까다롭네
- while문 사용해서 구현은 했는데 너무 가독성도 안좋고 논리 구조를 파악하기 힘들다
- 조금더 쉬운 방법 없을까?
- 아! 1 ~ n의 arr을 생성하고 조건에 따라 필터링하면 되겠는데?
- 변환값을 담은 데이터 길이가 n 이상이어야 되는데 어떤값을 쓰지?
- while을 사용해서 필터링하기 전 데이터사이즈가 충분하지 않을 때 2배씩 늘리게 구현하자
평가
개선점
알게된점
반응형