[프로그래머스/C++]Lv.0 - 저주의 숫자 3

YH J·2023년 4월 25일
0

프로그래머스

목록 보기
73/168

문제 링크

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문만 써도 된다.

profile
게임 개발자 지망생

0개의 댓글