문제 해석
- 이 문제를 처음 보자마자 그냥 앞에 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());
br.close();
int movieName = 666;
int count = 1;
while(N > count){
movieName++;
if(String.valueOf(movieName).contains("666")){
count++;
}
}
bw.write(movieName+"");
bw.flush();
bw.close();
}
}
- 영화 제목을 string 타입으로 바꿔 666을 포함하는지 체크한 후 포함한다면 count++(반복문을 도는 기준)를 한다.
- 이렇게 된다면 해당 영화제목을 알아낼 수 있다.
결과
- 문제는 찾을 때까지 계속 반복문을 돌기 때문에 시간이 너무 많이 소요되는 단점이 있다.
느낀점
- 이 알고리즘에 대해서는 다시 보완할 생각이다.(시간이 너무 많이 나와서...)