티스토리 뷰

PS

백준 1436. 영화감독 숌

tose33 2021. 5. 11. 21:16

www.acmicpc.net/problem/1436

 

1436번: 영화감독 숌

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

www.acmicpc.net

주어지는 숫자 n이 10000이하의 자연수이기 때문에 브루트포스로 풀수있다.

 

666부터 숫자를 증가시키면서 숫자가 666을 포함하는지 검사하고 포함한다면 카운트를 증가시킨다.

카운트가 n이 될때의 숫자가 정답이다. 

 

#include <iostream>
using namespace std;

// 연속된 6이 3개 이상있으면 true 반환
bool sixs(long long n) {
    int six = 0;
    while(n) {
        if(six >= 3)
            return true;

        int last = n % 10; // 마지막자리 수
        if(last == 6) { // 마지막자리수가 6이 아니면
            six++;
        }
        else { // 마지막자리수가 6이면
            six = 0; // six 갯수 0으로 초기화
        }
        n = n / 10; // 마지막자리수 버림

    }

    if(six >= 3)
        return true;
    else
        return false;

}

int main() {
    int n;
    cin >> n;

    int cnt = 0;
    int i = 0;
    while(true) {
        if(sixs(i)) cnt++;

        if(cnt == n) {
            cout << i;
            return 0;
        }
        i++;
    }
}

실행시간 28ms.

 

 

아래는 string.find 함수를 이용해 숫자를 스트링으로 변환해서 답을 찾은것.

코드는 깔끔해진 반면 실행시간은 92ms로 늘어남.

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

int main() {
    int n;
    int cnt = 0;
    int name = 666;
    string s;

    cin >> n;

    while(name) {
        // 현재 숫자를 스트링으로 변환후
        s = to_string(name);

        // 문자열에 "666"이 포함되어 있다
        if(s.find("666") != -1)
            cnt++; // 카운트 증가

        if(cnt == n) {
            cout << name << '\n';
            return 0;
        }
        name++;
    }

}

string.find() 함수는 파라미터로 전달된 문자열이 포함되있으면 시작지점을 반환.

없으면 string::npos 반환 (-1) 

'PS' 카테고리의 다른 글

백준 14889. 스타트와 링크  (0) 2021.05.17
백준 14501. 퇴사  (0) 2021.05.13
백준 1018. 체스판 다시 칠하기  (0) 2021.05.11
백준 7568. 덩치  (0) 2021.04.30
백준 2231. 분해합  (0) 2021.04.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함