www.acmicpc.net/problem/1436

 

1436번: 영화감독 숌

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

www.acmicpc.net

#include <cstdio>
#include <string>
using namespace std;
int main(void)
{
  int n = 0;
  scanf("%d", &n);

  int count = 0;
  int answer = 0;
  int val = 666;

  // 666이 들어간 숫자를 1씩 증가하면서 n번 찾는다
  while(count != n)
  {
    // 666이 들어가있는 숫자라면 count 1 증가, 정답 업데이트하기를 반복
    if(to_string(val).find("666") != string::npos)
    {
      count++;
      answer = val++;
    }
  }
  // 끝나면 answer 에 n번째 666이 포함된 문자가 들어있음
  printf("%d\n", answer);
}

[Try]

1. 패턴을 찾아내려다가 생각해보니 문자열 비교를 하면 될 것 같았다. 그런데 테스트케이스로 반복하는 것이 아니라 한번만 찾으면

     되기 때문에 굳이 최댓값이 10000개를 구해놓을 필요 없이, n 을 패턴에 의해 잘라내서 값을 찾는게 효율적이어 보였다.

2. 패턴 방식은 너무 로직이 복잡해지고 꼬여서 포기. 문자열 비교로 풀어보자

 

[Point]

1. 패턴으로 풀때는 1시간 반? 2시간? 정도 규칙찾으면서 디버깅하느라 죽을 뻔 했는데 문자열 비교로 푸니까 바로 풀었다...ㅎㅎ...

2. 모조리 검사하는 완전탐색 방식의 문제가 너무싫다. 왠지 그렇게 풀면 비효율적인 것 같아서 이 악물고 다른 방식을 찾아내려고

     하는데 결국 실패하면 너무 허탈하다.

3. 최댓값 10000개를 다 구해놓고 입력받은 값을 인덱스로 사용해 푸신 분도 계시다. 이게 오히려 문자열 검사보다 시간이 훨씬 빠

     르기도 하다.

4. 문자열로 비교 할 필요 없이 숫자를 10씩 나눠가면서 검사하는 것이 더 좋을 것 같다. (평균 40ms vs 240ms)

 

[More]

1. 실제로 패턴으로 푸신 분이 있는데 잘 이해가 안간다. 계속 읽어볼 것 (17901246) (15933800)

'PS > BOJ' 카테고리의 다른 글

[백준] 11651.cpp : 좌표 정렬하기 2  (0) 2020.05.14
[백준] 7568.cpp : 덩치  (0) 2020.05.14
[백준] 11866.cpp : 요세푸스 문제 0  (0) 2020.05.12
[백준] 10866.cpp : 덱  (0) 2020.05.12
[백준] 10845.cpp : 큐  (0) 2020.05.11

+ Recent posts