알고리즘 문제풀이/백준

#2231 : 분해합

모항 2022. 3. 2. 12:05

풀이방법

사용된 것:

브루트포스

0부터 시작하여 n 미만의 모든 정수를 점검하는 방법이 가장 빠른 방법이므로 브루트포스 알고리즘이 적합하다.

 

2022.03.02

0부터 시작하여, n 미만의 모든 정수의 분해합을 구해본다.

분해합이 n인 정수가 발견되면 즉시 그 정수를 화면에 출력하고 프로그램을 종료한다.

n-1까지 모두 점검하였는데도 해당하는 수가 없다면 화면에 0을 출력하고 프로그램을 종료한다.

 

코드

Java(2022.03.02)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	static int n;
	static int a,b,c,d,e,f,g;	//자릿수별 숫자(각각 1, 10, 100...의 자리 숫자)
	
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		n = Integer.parseInt(br.readLine());
		
		//if연산으로 시간 낭비를 하지 않기 위해 for문을 자릿수에 따라 나눴음...
		
		for(int i = 0; i<10; i++) {
			if(n == i*2) {	//한 자리수짜리 생성자는 본인*2의 결과물을 냄
				System.out.print(i);
				System.exit(0);
			}
		}
		for(int i = 11; i<100; i++) {
			a = i%10;	//1의 자리 숫자
			b = i/10;	//10의 자리 숫자
			if(i + a + b == n) {
				System.out.print(i);
				System.exit(0);
			}
		}
		for(int i = 101; i<1000; i++) {
			a = i%10;	//1의 자리 숫자
			b = (i%100)/10;	//10의 자리 숫자
			c = i/100;	//100의 자리 숫자
			if(i + a + b + c == n) {
				System.out.print(i);
				System.exit(0);				
			}
		}
		for(int i = 1001; i<10000; i++) {
			a = i%10;
			b = (i%100)/10;
			c = (i%1000)/100;
			d = i/1000;
			if(i + a + b + c + d== n) {
				System.out.print(i);
				System.exit(0);				
			}			
		}
		for(int i = 10001; i<100000; i++) {
			a = i%10;
			b = (i%100)/10;
			c = (i%1000)/100;
			d = (i%10000)/1000;
			e = i/10000;
			if(i + a + b + c + d + e== n) {
				System.out.print(i);
				System.exit(0);				
			}
			}
		
		for(int i = 100001; i<1000000; i++) {
			a = i%10;
			b = (i%100)/10;
			c = (i%1000)/100;
			d = (i%10000)/1000;
			e = (i%100000)/10000;
			f = i/100000;
			if(i + a + b + c + d + e + f== n) {
				System.out.print(i);
				System.exit(0);				
			}
		}
		
		System.out.print(0);
		
		
	}

}

 

Java(2022.03.20, 개선 및 E-PPER용 solution 함수 버전)

import java.io.*;
class Main {
	public static int solution(int n) {
		int answer = 0;
		int i;

		for(i = 0; i<10; i++){
			answer = i*2;
			if(answer == n) return i;
		}
		for(i = 11; i<100; i++){
			answer = 0;
			answer += i/10;
			answer += i%10;
			if(answer + i == n) return i;
		}
		for(i = 101; i<1000; i++){
			answer = 0;
			answer += i/100;
			answer += (i%100)/10;
			answer += i%10;
			if(answer + i == n) return i;
		}
		for(i = 1001; i<10000; i++){
			answer = 0;
			answer += i/1000;
			answer += (i%1000)/100;
			answer += (i%100)/10;
			answer += i%10;
			if(answer + i == n) return i;
		}
		for(i = 10001; i<100000; i++){
			answer = 0;
			answer += i/10000;
			answer += (i%10000)/1000;
			answer += (i%1000)/100;
			answer += (i%100)/10;
			answer += i%10;
			if(answer + i == n) return i;
		}
		for(i = 100001; i<1000000; i++){
			answer = 0;
			answer += i/100000;
			answer += (i%100000)/10000;
			answer += (i%10000)/1000;
			answer += (i%1000)/100;
			answer += (i%100)/10;
			answer += i%10;
			if(answer + i == n) return i;
		}
		
		answer = 1000001;
		if(answer == n) return 1000000;
		
		return 0;
	}

 

 

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#2607 : 비슷한 단어  (0) 2022.03.02
#9012 : 괄호  (0) 2022.03.02
#9237 : 이장님 초대  (0) 2022.02.24
#20921 : 그렇고 그런 사이  (0) 2022.02.24
#23559 : 밥  (0) 2022.02.24