더 많이 실패하기

백준 1436번 영화감독 숌 자바 Java / 11단계 브루트 포스 본문

알고리즘/백준

백준 1436번 영화감독 숌 자바 Java / 11단계 브루트 포스

김발자~ 2022. 10. 12. 20:21
반응형

백준 11단계 5번 문제 - 1436 영화감독 숌

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

 

1436번: 영화감독 숌

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

www.acmicpc.net

 

 

 


11. 브루트 포스 (5) 백준 1436번 문제 영화감독 숌


문제


 

 

몇 번째로 '666'을 포함한 숫자인지 출력해야 하는 문제다

 

 

 


오답


 

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
32
33
34
35
36
37
38
39
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
        
        int num = 666;
        int arr[] = new int[10001];
        
        while(true) {
            String str = num + "";
            
            int series = 0;
            int idx = 0;
            for(int i = 0; i < str.length() - 3; i++) {
                int one = str.charAt(i);
                int two = str.charAt(i+1);
                int three = str.charAt(i+2);
                if(one == 6 && two == 6 && three == 6) {
                    series = num;
                    break;
                }
            }
            
            if(series == num) {
                arr[idx] = series;
                idx++;
                if(idx == 10001)
                    break;
            }
            num++;
        }
        System.out.println(arr[n]);
    }
}
 
cs

 

메모리초과 뜬 코드

카운팅정렬하듯이 인덱스값에 차례대로 넣어보려고 했는데 실패했다

 

 

 


정답 인정 코드


 

그래서 생각해본 메서드는 contains()

포함하고 있다면 true를 반환하는 String의 메서드이다

 

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
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());
        int number = 666;    //666은
        int count = 1;        //1번째
        
        while(count != n) {
            number++;
            String str = number + "";
            
            if(str.contains("666")) {
                count++;
            }
        }
        System.out.println(number);
        
    }
 
}
cs

 

number, count를 각각 665, 0으로 주어도 같은 결과가 나온다

 

 

 


브루트포스도 끝!

목표했던 단계별로 풀어보기를 11단계까지 끝냈다

반응형
Comments