풀이방법
사용된 것:
브루트포스
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 |