suheang

[백준] | JAVA, 자바 | 1436번 - 영화감독 숌 본문

알고리즘

[백준] | JAVA, 자바 | 1436번 - 영화감독 숌

suheang 2024. 3. 15. 21:42

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

 

1436번: 영화감독 숌

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

www.acmicpc.net


문제 요약 :

종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 "세상의 종말 666", 두 번째 영화의 제목은 "세상의 종말 1666"와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.

 

숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램을 작성


문제 풀이 :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

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

        int n = Integer.parseInt(br.readLine());

        ArrayList<Integer> list = new ArrayList<>();

        int num = 666;

        while (true) {
            int count = 0;
            int temp = num;

            while (temp > 0) {
                if (temp % 10 == 6) {
                    count++;
                } else {
                    count = 0;
                }

                if (count == 3) {
                    list.add(num);
                    break;
                }
                temp /= 10;
            }
            num++;

            if (list.size() == n) {
                break;
            }
        }
        System.out.println(list.get(n-1));
    }
}

 

1. n 번째 숫자 입력받기

2. 제일 작은 종말의 수를 담은 num 변수 생성

3. 6의 개수를 확인할 count 변수 생성, temp 변수를 생성하고 num의 값을 저장

4. temp가 0 이상일 시 while문 동작

5. temp를 10으로 나누어 남은 수가 6이라면 count를 증가, 6이 아니라면 count는 0, 6이여도 그다음 수가 6이 아니라면 0으로 초기화

6. count가 3, 즉 6이 3번 반복되었다면 list에 저장하고 종료

7. temp의 값을 10으로 나눈 수가 0이 될 때까지 while문 반복

8. num 값을 1 증가

9. list의 크기가 n과 같다면 종료, 같지 않다면 while문 반복

10. n - 1이 n의 index 값이므로 list.get(n-1)을 출력