Level 0) 저주의 숫자 3 ⭐️

Doozuu·2023년 1월 29일
0

프로그래머스 (JS)

목록 보기
29/183

문제 설명

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


풀이

  1. 빈 배열을 만들어 1부터 185까지 넣는다.
  2. 3의 배수와 3을 포함하는 숫자를 모두 제거해서 index를 이용해 주어진 숫자를 찾는다.

참고 | 숫자를 185까지 넣은 이유
주어진 제한사항이 100까지라서 두 배를 하여 200까지 넣어봤다. filter를 한 후에 length를 이용해 갯수를 세어보니 109가 나왔다. 200이 아닌 185를 넣으면 딱 100개라서 185로 수정했다.

function solution(n) {
    let arr = [];
    for(i=1;i<=185;i++){
        arr.push(i);
    }
    return arr.filter(n => n%3 !== 0).map(n => String(n)).filter(n => !n.includes("3")).map(n => Number(n))[n-1];
}

다른 풀이

  1. while문을 이용해 num을 1부터 하나씩 증가시키면서 조건에 맞을 경우(3의 배수가 아니고 3을 포함하지 않을 때)에만 빈 배열에 넣어준다.
  2. 배열 원소들과 1부터 n까지의 수는 일대일 대응이므로 둘의 갯수가 같아질 때 반복문을 멈추어 배열의 가장 마지막 요소를 Return 한다.
    ex. n=5
    10진법 1,2,3,4,5
    3x 마을 숫자 1,2,4,5,7
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();
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글