처음부터 차근차근

[프로그래머스] Lv0 저주의 숫자3 본문

코딩테스트/Javascript

[프로그래머스] Lv0 저주의 숫자3

HangJu_95 2023. 11. 1. 14:56
728x90

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/120871

문제 설명

 

내 풀이

function solution(n) {
    // 1. answer = 1로 설정
    let answer = 1
    // 2. 정수 n만큼 반복문 실행
    for (i = 1;i < n; i++){
        // 2-1 반복문을 돌리때마다 숫자 1을 추가
        answer++
        // 2-2 math 함수 실행
        answer = math3(answer)
    }
    return answer
}

function math3(answer) {
    // 3으로 나뉘어지거나, 3이 포함되어 있는 경우
    if (answer % 3 == 0 || String(answer).includes('3')){
        // 숫자를 증가시키고
        answer ++
        // 다시 한번 재귀함수 DP 실행
        return math3(answer)
    } else {
        // 그렇지 않다면 return
        return answer
    }
}

다른 사람의 풀이

function solution(n) {
  return [...Array(n * 3)]
    .map((_, i) => i + 1)
    .filter((num) => num % 3 !== 0 && !num.toString().includes("3"))[n - 1];
}

먼저 3n 만큼의 배열을 먼저 생성

map을 통해 배열 안 인자를 정렬하고,

filter를 통해 저주의 숫자 3을 제거한 뒤, n에 해당하는 숫자를 출력

오늘 배운 점

  • DP를 사용하는 알고리즘이지만, 다른 방법도 있다는 것을 알았다. 
  • 하지만 method를 많이 사용하는 방법이므로, 효율성 테스트에서 통과하지 못할 것 같다.