PS/백준
[백준/1436번/java] - 영화감독 숌
정코딩딩
2024. 3. 26. 16:33
처음엔 숫자를 직접 입력해서 규칙을 찾아보았는데..
666,1666,2666,3666,4666,5666,6660~6669,7666,8666,9666 이렇게 한 사이클이 총 19개로 이루어져 있고, 20번째부터는 10666,11666,12666,13666,14666,15666,16660~16669, 17666,18666,19666 이런식으로 증가하는 것을 찾을 수 있다. 그러면 문제는 60666이 나오는 때 부터가 또 새로운 패턴을 가지게 된다.
그래서 생각했던 건, 들어오는 숫자를 19로 나누었을 때 몫이 맨 앞자리는 19로 나눈 몫, 그 뒷자리는 나머지.. 라고 생각을해서 첫 19개는 몫이 0 이고 나머지가 7 미만이면 나머지 자체를 붙이고, 7번째부터는 6660~6669 로 새롭게 부여하고, 그 이후는 다시 7666,8666 이런식으로 붙여나가려고 했는데.. if 문으로 처리해야하는 경우들이 너무 많아지는 것 같아서 포기하고 새로운 방법으로 풀어보았다.
import java.util.Scanner;
public class boj_1436 {
/**
* 브루트포스 알고리즘
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
int num = 666;
int cnt = 1;
while(cnt != N){
num++;
if(String.valueOf(num).contains("666")){
cnt++;
}
}
System.out.println(num);
}
}
이렇게 무식하게 수를 하나씩 다 확인하면서 푸는 알고리즘을 브루트포스 알고리즘이라 한다고 한다. brute (무식한) + force (힘) .. 맞는거 같다.
cnt 가 입력받은 수랑 동일해질 때 까지 while 문을 반복한다. 만약 187을 입력받는다면 while 문을 187번 반복하는거다...
그렇게 하면 정답이 나온다
끝!