알고리즘/프로그래머스 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 이 답이다.