관리 메뉴

사과하는 제라스

[백준 BOJ 1436번] 영화감독 숌 본문

JAVA 백준 알고리즘 문제풀이/브루트 포스

[백준 BOJ 1436번] 영화감독 숌

Xerath(제라스) 2021. 10. 20. 09:09

목차

    728x90
    반응형

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

     

    1436번: 영화감독 숌

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

    www.acmicpc.net

     

    1. 문제

    666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다.

    하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.

    종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 과 같다.

    따라서, 숌은 첫 번째 영화의 제목은 세상의 종말 666, 두 번째 영화의 제목은 세상의 종말 1666 이렇게 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 숫자) 와 같다.

    숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.


    2. 입력

    첫째 줄에 숫자 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

    2
    3
    6
    187
    500

    3. 출력

    첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.

    1666
    2666
    5666
    66666
    166699

    4. 풀이

    문제를 딱 읽는 순간, 절실히 필요한 기능이 하나 있었다. 어떤 문자열 안에 특정 문자 혹은 문자열이 있는지 검사하는 기능을 원했다. 그래서 찾아본 결과 찾은 함수가 contains 함수이다. 해당 함수를 임의의 문자열에 대하여 사용한다면 그 문자열에 특정 문자열이 있는지 없는지 T/F 리턴값을 추출해낼 수 있었다.

     

    이 문제를 풀어보자면...

    1) 몇번째 영화 제목을 원하는지 입력받아서 N값에 넣어준다,

    2) i값은 순차적인 숫자들을 비교하기 위해 for문처럼 1씩 증가시키는 변수로 쓰기 위해 0으로, count값은 카운팅 변수로 사용하기 위해 0으로 초기화해준다.

    3) 1씩 증가하는 i값이 666을 포함한다면 count값을 1 증가시키고 만약 count값이 내가 찾고자 하는 순서의 영화 제목이라면 출력, 아닐 경우 계속 i를 증가시키면서 비교해나간다.


    5. 소스코드

    import java.io.*;
    
    class Main{
        public static void main(String [] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
            int N = Integer.parseInt(br.readLine());
            int i = 0;
            int count = 0;
            
            while(count != N){
                if(Integer.toString(i).contains("666")) count++;
                if(count == N){
                    System.out.println(i);
                }
    
                i++;
            }
        }
    }

    6. 배운 것

    문제에서 쓰고 싶은 기능을 구현할 수 있는 String 클래스의 contains라는 함수를 사용해보았다. 이외에도 찾고자하는 문자의 위치를 나타내는 indexOf, 찾고자하는 정규표현식의 존재 여부를 알고자 하는 matches 함수를 배웠다.

    [출처] : https://coding-factory.tistory.com/534 

     

    [Java] 문자열에 특정 문자 포함 찾기/검색하는 다양한 방법(indexOf, contains, matches)

    프로그래밍을 하다보면 특정 문자열에서 원하는 문자가 포함되어 있는지 확인해야하는 소스를 넣을때가 종종 있습니다. 문자열을 찾는 방법은 String클래스의 indexOf(), contains(), matches()메소드를

    coding-factory.tistory.com

     

    728x90
    반응형