문제 링크
주의사항
- JAVA를 사용하여 프로그램을 사용하였습니다.
- 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{
public static void main(String[] args){
}
}
문제 설명
접근 방법
브루트 포스란. 모든 경우의 수를 대입시켜서 가장 알맞은 경우의 수를 결과로 출력하는 것입니다.
이 문제에서 숫자 2로 나누었을 때 수들은 절대 분해합이 될 수 없기 때문에 2로 나눈 수부터 경우의 수를 구하였습니다.
- BufferedReader를 사용하여 입력 값을 받았습니다.
- 분해합 중 가장 작은 수를 구하는 decompose함수를 만들었습니다.
- 입력값에 2로 나누었을 때보다 작은 값들은 분해값이 될 수 없기 때문에 num/2부터 경우의 수를 찾기 시작하였습니다.
- 각 자리의 수와 현재 숫자를 더하여 입력값과 같으면 분해합으로 반환하였으며 경우의 수를 모두 확인하였을 때 분해합이 나오지 않는다면 0을 반환하도록 하였습니다.
- 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()); //숫자 받기
bw.write(decompose(num) + "\n"); //함수 결과 bw에 저장
bw.flush(); //결과 출력
bw.close();
br.close();
}
public static int decompose(int num){ //분해합 함수
for(int i=num/2;i<num;i++) { //분해 합인지 확인하기
int temp = i + (i/100000) + (i%100000)/10000
+ (i%10000)/1000 + (i%1000)/100 + (i%100)/10 + i%10;
if(temp==num) //분해합이면 반환
return i;
}
return 0; //분해합이 아니면 0 반환
}
}
'백준' 카테고리의 다른 글
[백준] 단계별로 풀어보기(단계:11,브루트 포스,JAVA)1018번, 체스판 다시 칠하기 (0) | 2022.01.10 |
---|---|
[백준] 단계별로 풀어보기(단계:11,브루트 포스,JAVA)7568번, 덩치 (0) | 2022.01.10 |
[백준] 단계별로 풀어보기(단계:11,브루트 포스,JAVA)2798번, 블랙잭 (0) | 2022.01.09 |
[백준] 단계별로 풀어보기(단계:10,재귀,JAVA)11729번, 하노이 탑 이동 순서 (0) | 2022.01.08 |
[백준] 단계별로 풀어보기(단계:10,재귀,JAVA)2447번, 별 찍기 - 10 (0) | 2022.01.08 |
댓글