백준

백준 1436 C++

solfa 2024. 2. 25. 14:10

https://www.acmicpc.net/problem/1436

 

1436번: 영화감독 숌

666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워

www.acmicpc.net

 

문제 정리

1번째 영화 - 666, 2번째 영화 - 1666, 3번째 영화 - 2666 ... 이런식으로 n번째 영화의 666을 찾아라!

 

생각

근데 이해하는데 좀 시간이 걸렸는데 이렇게 생각하면 된다

666이 들어간 모든 숫자중에서 작은 순으로 배열이나 벡터를 만들어서 그것의 n번째 인덱스 찾기!

666 1666 2666... 10666 이게 아니라 6661이 그 사이에 있다는 소리!

숫자를 하나씩 늘려가면서 666이 있을 때 체크하면 될 듯

 

코드

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    int n, count = 665;
    vector<int> v;
    cin >> n;

    while(v.size()<n){
        count++;
        string numStr = to_string(count);
        // 현재 수를 문자열로 변환!
        if(numStr.find("666") != string::npos){
            v.push_back(count);
        }
    }
    cout<<v.back();
}

 

이건 누가봐도 벡터가 편할 것 같은 문제라 벡터를 썼다!!! 개편함 굿

중요한 부분은

        if(numStr.find("666") != string::npos){

이 부분인데 string내장함수인 find를 사용해 666을 찾는다는 소린데 find함수의 npos를 사용하면 편하다.

 

find

string에서 단어를 찾을 떄 find와 npos를 사용한다

  • 문자열 앞에서부터 검색, 검색 문자열이 시작되는 위치 반환
  • 검색 문자열이 없으면 string::npos(4294967295) 반환

여기서 npos는 -1 값을 가지는 상수!!!


 

단어 존재 여부 확인 참고 글

https://jie0025.tistory.com/169

 

[C++] string::find, string::npos 단어 존재 여부 확인

string 형의 데이터에서 어떤 단어가 존재하는지 찾을 떄 find와 npos를 사용한다. find 문자열 앞에서부터 검색, 검색 문자열이 시작되는 위치 반환 검색 문자열이 없으면 string::npos(4294967295) 반환. #in

jie0025.tistory.com

 

728x90

'백준' 카테고리의 다른 글

백준 1240 C++  (0) 2024.03.03
백준 20300 C++  (0) 2024.02.25
백준 14889 C++  (1) 2024.02.20
백준 15686 C++  (0) 2024.02.18
백준 3085 C++  (0) 2024.02.17