IDEA
맨 처음에는 일단 써봤다.
1666
2666
3666
4666
5666
6660
6661
.........
규칙성을 찾을수가 없어서 666을 기준으로 앞에는 1 ~ 9를 더해주고 뒤로는 0~9를 더해줘서 리스트에 넣어준 후
정렬을 통해 K번째 종말의 수를 찾아주면 되지 않을까? 생각을 해보았다.
구현하기 귀찮을 거 같아서 다른 방법이 없을까 생각을 해보았다.
우리가 찾는 수는 최대 10000번째 수이다. 그래서 완전탐색? 브루트포스를 이용해서 최소 666부터 숫자를 하나하나 늘려가며 6이 몇개인지 확인해도 주어진 시간 안에 돌아갈 거라고 생각했다.
- while 반복문을 통해서 숫자를 하나하나 늘려가며 6이 연속으로 3개 이상 있는지 확인한다.
6이 연속으로 3개 이상 있는 지 어떻게 확인하냐? 라는 것이다. 이렇게 숫자의 자리수 하나하나를 확인할때는
문자열로 처리해 확인하는 것이 더 간편하다.
- to_string을 이용해 문자열로 바꾼 후 string에서 제공하는 find를 사용하여 연속된 666이 존재하는 지 확인해준다.
몇 번째 수인지를 나타내는 cnt를 이용하여 666이 존재하면 cnt를 카운트 해준 후 내가 원하는 번째 숫자라면 while문을 탈출한다.
CODE
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main() {
int m;
scanf("%d", &m);
int num = 666;
int cnt = 0;
while (1) {
string str = to_string(num);
if (str.find("666") != -1) cnt++;
if (cnt == m) break;
num++;
}
printf("%d", num);
}
'알고리즘 > 백준 단계별로 풀기 (12.26 ~ 12.31)' 카테고리의 다른 글
다이나믹 프로그래밍1 - 백준 1912번 연속합✨ (0) | 2021.01.02 |
---|---|
큐,덱 - 백준 5430번 AC (0) | 2021.01.02 |
다이나믹프로그래밍 - 백준 2156번 포도주 시식 (0) | 2020.12.31 |
우선순위 큐 - 백준 1655번 가운데를 말해요 ✨(running median heap) (0) | 2020.12.30 |
다이나믹프로그래밍1- 백준 1932번 정수 삼각형 (0) | 2020.12.28 |