문제 링크
주의사항
- JAVA를 사용하여 프로그램을 사용하였습니다.
- 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{
public static void main(String[] args){
}
}
문제 설명
접근 방법
브루트 포스란. 모든 경우의 수를 대입시켜서 가장 알맞은 경우의 수를 결과로 출력하는 것입니다.
첫 작품부터 입력 값까지의 경우의 수를 구하여 결과를 출력하였습니다.
문제에서 666의 숫자가 포함되어야 합니다. 그래서 앞에 숫자에 따라 작품에 번호가 달라집니다.
- XXX6이 앞에 숫자이면 660~669까지 10번 반복된다.
- XX66이 앞에 숫자이면 600~699까지 100번 반복된다.
- X666이 앞에 숫자이면 0~999까지 1000번 반복된다.
- 666X이 앞에 숫자가 올 수 있지만 입력받은 값에는 10000이하의 자연수만 입력받기 때문에 666X가 앞에 자리로 오기 전에 경우의 수가 끝나기 때문에 666X는 올 수가 없습니다.
경우의 수를 XXX6,XX66,X666일 때와 XXXX일 경우를 따져서 문제를 해결하였습니다.
- BufferedReader를 사용하여 입력 값을 받았습니다.
- 영화 작품 이름을 구하는 moiveName함수를 만들었습니다.
- 위에 경우의 수를 if문을 통해서 나누었습니다.
- 입력 값과 현재 작품의 수를 차이를 통해 for문으로 범위를 반복하는 것이 아닌 바로 구할 수 있도록 하였습니다.
- 함수 결과를 받아서 bw에 저장하였습니다.
- BufferedWriter를 통해 저장된 결과를 출력하였습니다.
결과 코드
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//BufferedReader를 통해 입력 값 받기
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//BufferedWriter를 통해 결과 출력
int num = Integer.parseInt(br.readLine()); //입력값 저장
String result = movieName(num); //함수 결과 저장
bw.write(result + "\n"); //결과 bw에 저장
bw.flush(); //결과 출력
bw.close();
br.close();
}
public static String movieName(int n) { //영화이름 함수
String basic = "666";
int current = 2, first_digit = 1; //현재 작품, 들어갈 첫 번호
if(n==1) //첫 영화일 경우
return basic;
else{
while(true) {
int dif = n-current;
//첫 숫자가 X666일 경우
if(first_digit%1000==666) {
if(dif<1000) {
if(dif>100)
return first_digit + String.valueOf(dif);
else if(dif>10)
return first_digit + "6" + dif;
else
return first_digit + "60" + dif;
}
else {
current +=1000;
first_digit++;
}
// 첫 숫자가 XX66일 경우
}else if(first_digit%100==66){
if(dif<100) {
if(dif>=10)
return first_digit + "6" + dif;
else
return first_digit + "60" + dif;
}
else {
current +=100;
first_digit++;
}
// 첫 숫자가 XXX6일 경우
}else if(first_digit%10==6) {
if(dif<10)
return first_digit + "66" + dif;
else {
current +=10;
first_digit++;
}
}else {
if(current==n) //첫 글자가 6이 아닌 경우
return first_digit + basic;
else {
current++;
first_digit++;
}
}
}
}
}
}
'백준' 카테고리의 다른 글
[백준] 단계별로 풀어보기(단계:12,정렬,JAVA)2751번, 수 정렬하기 2 (0) | 2022.01.13 |
---|---|
[백준] 단계별로 풀어보기(단계:12,정렬,JAVA)2750번, 수 정렬하기 (0) | 2022.01.11 |
[백준] 단계별로 풀어보기(단계:11,브루트 포스,JAVA)1018번, 체스판 다시 칠하기 (0) | 2022.01.10 |
[백준] 단계별로 풀어보기(단계:11,브루트 포스,JAVA)7568번, 덩치 (0) | 2022.01.10 |
[백준] 단계별로 풀어보기(단계:11,브루트 포스,JAVA)2231번, 분해합 (0) | 2022.01.09 |
댓글