스터디/코딩테스트

javascript 코딩테스트 - 저주의 숫자 3

공대생철이 2023. 3. 2. 18:27
728x90

문제 설명

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

입출력 예nresult
15 25
40 76

 

처음 든 생각

- 일단 순서를 좀 이해해보자

- 1부터 차례대로 올라가는데 3의 배수와 3이 들어간 숫자들을 제외시켜야되는구나

- 8에서 9로 간 경우 +3으로 건너뛰었다.(12는 3의 배수, 13은 3이 들어감)

  뭔가 재귀로 해서 계속해서 체크를 하면 되지 않을까?

 

나의 답 

function solution(n) {
    let answer = 0;

    const checkNumber = (k)=>{
        const numbers = String(k).split("")
        if(k%3===0|| numbers.includes("3")){
            answer++
            checkNumber(answer)
    	} else {
        return
    	}
    }
    for(let i = 0; i<n; i++){
        answer++
        checkNumber(answer)
    }
    return answer
}

일단 반복문을 돌게되고 그때마다 무조건 1씩을 추가해준다.

그리고 1을 추가한 값이 3의 배수인지 3이 포함된지 아닌지만 판단.

 

그래서 checkNumber라는 함수를 따로 만들어주었다.

만약 3의 배수이거나 3이 포함되면 answer는 하나 더 늘어나게 되고 1이 더해진 값에 대하여 한 번 더 checkNumber를 수행한다.

아무 조건에도 걸리지 않으면 그대로 리턴하고 함수를 종료한다.

 

재귀를 사용해서 처음 해결해본 것 같다.

 

 

728x90