본문 바로가기
백준

[백준] 단계별로 풀어보기(단계:11,브루트 포스,JAVA)2231번, 분해합

by 열정적인 이찬형 2022. 1. 9.

문제 링크

2231번: 분해합
 
www.acmicpc.net

주의사항

  • 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 반환
	}
}

댓글