저주의 숫자 3, Javascript

cptkuk91·2023년 2월 14일
1

Algorithm

목록 보기
133/161
post-custom-banner

문제

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

코드

function solution(n) {
    let result = 0;
    
    for(let i = 1; i <= n; i++){
    	result++;
        
        while(result.toString().includes("3") || result % 3 === 0){
        	result++;
        }
    }
    
    return result;
}

풀이

우선 반환값 result를 선언하고 설명을 읽어보면 1부터 시작이다. 따라서 i = 1로 시작한다.
이제 규칙부분이고, 규칙을 찾을 때 큰 어려움을 겪었다. 5 = 7 이 부분에서 왜 5가 7일 될까 고민을 많이 했고, 10진법을 기준으로 생각하지말고, 3x 마을 result를 기준으로 생각해야 한다.

1이면 1이다.
2는 2다.
3부터 생각을 해야한다. 3은 3의 배수 또는 3이기 때문에
while문에서 ++을 해준다. 이때 while문 들어가기전 result++이 있기 때문에, 4가 된다.
4는 1일 때 1이고, 2일 때 2고, 3일 때 result++, while문의 result++을 동시에 먹기 때문에 현재 3은 4고, 4는 3의 배수 또는 3이 없기 때문에 for문안에서 result++만 한다. 그럼 5가 된다.

이제 제일 중요한 5다. 여기서부터 규칙을 정말 잘 생각해야한다. 4까지는 다른 규칙으로도 많은 생각이 든다.
잘보면 i는 1부터 시작한다.
1일 때, 2일 때, 3일 때 전부 진행해서 와야하는 거고, 4일 때 result는 현재 5다.
10진법 5는 4까지의 숫자를 생각했을 때 5다. i = 5 이때 for문 안의 result++로 6이 된다. 그럼 while()문의 조건 3의 배수 또는 3이 들어간다. 따라서 while문에서도 result++을 통해 result는 7이 된다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)
post-custom-banner

0개의 댓글