문제
풀이
이 문제는 제목에 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 |
댓글