반응형
코딩테스트 저주의 숫자 3
문제 설명
출력 예시
정수 n이 주어지면 1부터 n까지 숫자를 셀 때 3의 배수와 3을 보면 건너 뜁니다.
3, 6, 9, 12 ,15 같은 3의 배수를 건너 뛰고 3, 13 , 23 같은 3이 보이는 숫자도 건너 뛰어야 합니다.
바로 가겠습니다.
let n = 10;
var answer = 0;
let check1 = true;
let check2 = true;
for(let i=1; i<=n; i++){
++answer
check1 = true;
check2 = true;
while(check1 || check2){
}
}
//16
숫자를 셀 준비가 됐습니다.
for문으로는 1부터 n까지 세는 역할을 하고,
while 문으론 3의 배수, 3을 만나면 answer를 증가 시켜 3들을 피합니다.
조건식을 달아서 while문을 check 불린을 감지 해서 false 두개가 되면 while문이 멈추고 그 다음 for문을 실행하게 됩니다.
let n = 10;
var answer = 0;
let check1 = true;
let check2 = true;
for(let i=1; i<=n; i++){
++answer
check1 = true;
check2 = true;
while(check1 || check2){
if(answer % 3 == 0){
++answer
} else {
check1 = false;
}
if(answer == 133){
answer +=2
}
if(answer.toString().match(/[3]/g) > 0){
++answer
} else {
check2 = false;
}
}
}
//16
완성입니다. 조건문을 보자면,
answer % 3 == 0
3으로 나눴을 때 나머지가 0일 때는 3의 배수니 answer 증가,
match를 하여 3을 찾았을 시 answer증가,
별도로 133을 만나면 증가가 두번 되어야하는데 match로는 한계가 있어서 따로 조건식을 넣어줬습니다.
그렇게 1부터 10까지 올라갔을 때 출력되어야 하는 3의 저주 수는 16 입니다!