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
'스터디 > 코딩테스트' 카테고리의 다른 글
javascript 코딩테스트 - 겹치는 선분의 길이 (0) | 2023.03.02 |
---|---|
javascript 코딩테스트 - 평행 (0) | 2023.03.02 |
javascript 코딩테스트 - 다항식 더하기 (0) | 2023.02.28 |
javascript 코딩테스트 - 최댓값 만들기 (0) | 2023.02.28 |
javascript 코딩테스트 - 캐릭터의 좌표 (0) | 2023.02.28 |