백준 1436 영화감독 숌 [JAVA]

Ga0·2023년 4월 15일
0

baekjoon

목록 보기
30/125

문제 해석

  • 이 문제를 처음 보자마자 그냥 앞에 N-1하고 666을 붙여서 출력하면되는 거 아닌가? 하면서 쉽게 접근했지만 아니었다...
  • 일단 문제를 풀기 앞서 종말의 숫자 라는 것을 알아야하는데 종말의 숫자란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다.
  • 정리하자면 아래와 같이 증가한다.
    • 첫번째 영화의 제목은 666
    • 두번째 영화의 제목은 1666
    • 세번째 영화의 제목은 2666
    • 네번째 영화의 제목은 3666...
  • 여기서 중요한 포인트는 단순하게 666, 1666, 2666, 3666, 4666, 5666, 6666, 7666, 8666, 9666, 10666이런식으로 증가하는게 아니고 하나 더 체크해야하는 부분이 있다.
  • 적어도 6이 연속적으로 3번 나오는 숫자들을 크기 순서대로 비교하는 것! 이게 아주 중요한 포인트이다.
    • 입력 값이 5이면 4666을 출력
    • 입력 값이 6이면 5666을 출력
    • 입력 값이 7이면 6666이 아닌 6660을 출력
  • 즉, 다시 말해 대략적인 순서는 아래와 같다.
    -666, 1666, 2666, 3666, 4666, 5666 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669, 7666... 이렇게 진행된다는 것이다.

코드

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine()); //입력받은 N번째
        br.close();

        int movieName = 666; //영화 제목이 들어갈 변수
        int count = 1; //반복문 카운트 셀 변수

        while(N > count){
            movieName++;

            if(String.valueOf(movieName).contains("666")){ //666이 들어간 부분을 순서대로
                //만약  666을 포함한다면
                count++;
            }
        }

        bw.write(movieName+"");
        bw.flush();
        bw.close();

    }
}
  • 영화 제목을 string 타입으로 바꿔 666을 포함하는지 체크한 후 포함한다면 count++(반복문을 도는 기준)를 한다.
  • 이렇게 된다면 해당 영화제목을 알아낼 수 있다.

결과

  • 문제는 찾을 때까지 계속 반복문을 돌기 때문에 시간이 너무 많이 소요되는 단점이 있다.

느낀점

  • 이 알고리즘에 대해서는 다시 보완할 생각이다.(시간이 너무 많이 나와서...)

0개의 댓글