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이 된다.