https://school.programmers.co.kr/learn/courses/30/lessons/120871
처음엔 규칙을 몰랐다. 정리하면서 천천히 다시 읽어보니 알게되었다.
순차적으로 올라가면서 규칙을 적용시키면서 ++해간다.
3의 배수인경우, 1의자리가 3인경우, 10의자리가 3인경우를 처리하면된다.
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
for(int i = 0; i <= n; i++)
{
answer++;
if(answer % 3 == 0)
answer++;
if(answer % 10 == 3)
answer++;
if(answer/10 % 10 == 3)
while(answer <= 40)
answer++;
}
return answer;
}
#include <string>
#include <vector>
using namespace std;
bool isThree(int n)
{
while(n >0)
{
if((n % 10) == 3)
return true;
n =n/10;
}
return false;
}
int solution(int n) {
int answer = 0;
int cnt = 0;
for(int i = 1; i<=n; i++)
{
cnt++;
if( (cnt % 3 == 0)|| isThree(cnt) ) {
while( (cnt % 3 == 0)|| isThree(cnt) )
cnt++;
}
}
return cnt;
}
3의 배수이거나 숫자에 3이있는경우 true를 반환하는 함수를 만들어서 true일 경우 ++해준다.
대신 여기서 if문을 제거하고 while문만 써도 된다.