목차
코드
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int cnt = 0;
int answer = 665;
int condition = 665;
while(cnt != n){
answer++;
condition = answer;
while(condition >= 666){
if(condition % 1000 == 666){
cnt++;
break;
}
else{
condition /= 10;
}
}
}
cout << answer;
return 0;
}
사견
일단 문제에서 요구하는 6이 최소 3번이상 연속하는 수에 대해 생각해보자
666 1666 2666 3666 4666 5666
여기까지는 쉽게 생각이 된다.
그렇다면 5666 다음으로 6이 연속 3번 등장하는 작은 수는?
6660 이다.
6660 ~ 6669 까지 순서대로 된 후
이후에는 다시 7666이 된다.
이런 경우 어떻게 판단을 해야하나?
간단하다 666부터 모든 수에 6이 연속으로 3번 등장하는지 판별하는것이다.
해서 모든 수를 우선 1000으로 나누어 본 후, 나머지가 666이라면 카운트를 증가한다.
1000으로 나누었을때 666이 나오지 않는다면 그 수를 10으로 나누고 반복한다.
이렇게 하면 cnt가 주어진 수가 되었을때의 그 수가 정답이 된다.
'공부 > 백준' 카테고리의 다른 글
2751번: 수 정렬하기2(백준 C++) (0) | 2020.10.28 |
---|---|
2750번: 수 정렬하기(백준 C++) (0) | 2020.10.27 |
1018번: 체스판 다시 칠하기(백준 C++) (0) | 2020.10.25 |
7568번: 덩치(백준 C++) (0) | 2020.10.24 |
2231번: 분해합(백준 C++) (0) | 2020.10.23 |