알고리즘/프로그래머스 1단계

프로그래머스 - 저주의 숫자3 - C++

게임만드는학생 2023. 8. 29. 11:20

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    int i;
    for(i=1;answer<n;)
    {
        if(i%3!=0)
        {
            int j=i;
            while(j>0)
            {
                if(j%10==3)break;
                j/=10;
            }
            if(j==0)answer++;
        }
        i++;
    }
    
    return i-1;
}

설명

n이 주어졌을 때, n만큼의 숫자를 세는데 이 때, 3의 배수나 3이 들어가는 숫자는 세지 않는다.

 

answer 변수에 숫자를 카운트한다.

그래서 for문으로 i를 1씩 증가시키며 i가 3의배수이거나 3이 들어가면 answer를 카운트하지 않고 i를 증가시키고

그게 아니라면 answer 도 증가시킨다. 

 

// 3의 배수인지 체크
if(i%3!=0)
			// 숫자에 3이 들어가는지 체크
            int j=i;
            while(j>0)
            {
                if(j%10==3)break;
                j/=10;
            }
            
            // j가 0이면 3이 없었다는 소리이므로 answer 증가 즉, 숫자 카운트
            if(j==0)answer++;

for문 종료조건으로 answer가 n이랑 동일해질 때로 설정해두었다. 

answer가 숫자를 센 횟수이기 때문에 n이랑 동일해지면 3x마을의 숫자로 변형이 되었다는 것이다.

 

마지막에 i는 answer 증가 후 i가 증가하기 때문에 조건을 빠져나왔을 때는 answer가 n이랑 동일해졌을 때의 i보다 1증가한 상태이다. 따라서 i-1 이 답이다.