백준 1436_영화감독 숌 [C++]
본문 바로가기
Algorithm/Python, C++

백준 1436_영화감독 숌 [C++]

by liveloper jay 2022. 6. 29.

문제

 

풀이

이 문제는 제목에 666이 연속으로 들어가는 수를 찾는 문제입니다. 즉 어떠한 수 i가  1000으로 나누었을 때의 나머지가 666이 되고, 그때마다 +1씩 카운트하여  입력받은 n과 일치하는 수 i를 찾아야 한다는 뜻입니다. 여기까지만 들으면 666, 1666, 2666...... 이런식으로 찾으면 쉽게 해결할 수 있을 것이라는 생각이 듭니다. 하지만 여기에서 고려해야 할 사항이 하나 있습니다. 1~8번째까지의 예시를 바탕으로 풀이를 진행하겠습니다.

n=1 -> 666

n=2 -> 1666

n=3 -> 2666

n=4 -> 3666

n=5 -> 4666

n=6 -> 5666

n=7 -> 6665

n=8 -> 6666

 

예시에서 볼 수 있듯 6666  이전에 666이 연속으로 들어가는 수인 6665가 존재합니다. 그렇기 때문에 665부터 1씩 증가하는 값을 i 라고 할때 i를 1000으로 나누었을 때 나머지가 666이 아닌 경우 다음 수로 넘어가는 것이 아니라, i를 10으로 나누고, 그 수를 다시 1000으로 나눈 나머지가 666이 되는지를 확인하는 과정이 추가로 필요하게 됩니다.  이 문제는 n번째 수가 무엇인지 직접 보면서 풀이를 진행하시면 이해하기 조금 더 수월할 것 같습니다.

 

 

 

소스코드

#include<iostream>
using namespace std;

int main(){
    int i=665,n, cnt=0, value;
    cin >> n;
    while(cnt!=n){
        i++; value=i;
        while(value!=0){
            if(value%1000==666){
                cnt++;
                break;
                } 
                value/=10;
            }
        }
    cout << i;
}

 

'Algorithm > Python, C++' 카테고리의 다른 글

백준 11720_숫자의 합 [C++]  (0) 2022.07.04
백준 11654_아스키 코드 [C++]  (0) 2022.07.02
백준 7568_덩치 [C++]  (0) 2022.06.29
백준 2231_분해합 [C++]  (0) 2022.06.28
백준 2798_블랙잭 [C++]  (0) 2022.06.28

댓글