#include <iostream>
#include <string>
using namespace std;
int main()
{
int end_num, n, count = 1;
string str;
cin >> n;
if (n == 1) {
cout << 666;
}
else {
end_num = 1665;
while (n != count) {
end_num++;
str = to_string(end_num);
// find : 문자열을 찾은 위치를 반환. 못찾으면 npos를 반환.
if (str.find("666") != string::npos) {
count++;
}
}
cout << end_num;
}
return 0;
}
풀이
숫자 666이 들어가면 종말의 숫자다. 이해를 하는데 너무 오래걸렸다. (개빡대가리..) 어쨌든, 예시를 들자면 다음의 숫자들과 같다.
666, 1666, 2666, 3666, 4666, 5666, 6665, 6666, 6667, 6668, 6669, 10666 ...
즉, 5666 => 6666이 => 7666이 아닌 6665부터의 숫자도 잘 세줘야 한다.(6 세개가 붙어있기 때문.)
틀렸던 이유
경계값 테스트를 제대로 안해서 문제가 생겼었다. 원래는 cout << end_num이 else바깥쪽에 있어서 값 1을 입력했을 때 문제가 생겼었다.
'역시 내 문제해결 알고리즘은 잘못됐다 > 브루트 포스' 카테고리의 다른 글
백준 7568번 덩치 [C/C++] (0) | 2021.03.02 |
---|---|
백준 2798번 블랙잭 [C/C++] (0) | 2021.01.23 |
백준 1018번 체스판 다시 칠하기[C/C++] (0) | 2020.08.06 |
백준 2160번 C/C++ (0) | 2020.07.27 |
백준 10163번 C/C++ (0) | 2020.07.26 |