티스토리 뷰

처음에는 이게 뭔가 했다.

문제를 잘못 이해해서 "이게 문제인가..?" 싶었다.

1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main() {
    int input;
    cin >> input;
    input = (input - 1* 1000;
    cout << input + 666 << endl;
}
cs

처음에 이렇게 짰다가 바로 틀려버리고

문제를 자세히 봤더니 'N번째로 작은 종말의 숫자'라고 써있다.

그러니까, 나열해보면

 

666 1666 2666 3666 4666 5666 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 7666 8666 9666 10666 11666 12666 13666 14666 15666 16660 16661 16662 ...이런 식으로 간다는거다.

 

그럼 어떻게 해야하나..

 

숫자를 1씩 늘려가면서 6이 3번 연속되는 숫자일 때마다 세면 몇 번째로 작은 종말의 숫자인지를 알 수 있다.

6이 3번 연속되는지를 검사하는 것은 숫자를 문자열로 변환하고, strstr함수를 사용하면 된다.

 

형식

#include <string.h> char *strstr(const char *string1, const char *string2);

언어 레벨

ANSI

스레드세이프

설명

strstr() 함수는 string1에서 string2의 첫 번째 표시를 찾습니다. 함수는 일치 프로세스에서 string2로 끝나는 널 문자(\0)를 무시합니다.

리턴값

strstr() 함수는 string1에서 string2의 첫 번째 표시 시작 위치에 대한 포인터를 리턴합니다. string2 string1에 나타나지 않으면 strstr() 함수는 NULL을 리턴합니다. string2가 길이가 0인 스트링을 가리키면 strstr() 함수는 string1을 리턴합니다.

 

이게 strstr함수이다.

그러니까, strstr(str, "666")의 반환값이 존재한다면 종말의 숫자라는 뜻이고, NULL을 리턴하면 종말의 수가 아니라는 뜻이다.

 

그럼 이제 정수를 문자열로 변환해야한다. 처음에는 itoa함수를 사용했는데, ide에서 _itoa를 사용하라길래 바꿔서 썼다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
 
int main() {
    int input;
    cin >> input;
    int value = 666;
    for (int i = 0; i != input; value++) {
        char str[8];
        _itoa(value, str, 10);
        if (strstr(str, "666"!= NULL)
            i++;
    }
    cout << --value << endl;
}
cs

위 코드는 visual studio 2019에서는 잘 돌아가는데, 백준에서는 컴파일 에러가 뜬다.

왜그런가 하고 검색을 해봤는데 _itoa함수가 ansi표준이 아니라서 그렇단다. 그래서 다른 방법을 썼다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstring>
using namespace std;
 
int main() {
    int input;
    cin >> input;
    int value = 666;
    for (int i = 0; i != input; value++) {
        char str[8];
        sprintf(str, "%d", value);
        if (strstr(str, "666"!= NULL)
            i++;
    }
    cout << --value << endl;
}
cs

sprintf를 사용하면 된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함