브루트 포스 카테고리에 있는 문제이다.
친절하게 분해합이 무엇이고 어떻게 구하는지 알려주고 있다.
따라서 우리는 1부터 더해나가며 입력값이 나올 떄까지 모든 분해합을 구하면 된다.
그런데 조건을 보니 자연수가 1 ~ 1,000,000까지라고 한다.
아무리 브루트 포스라는 단어 자체가 노가다를 뜻한다고 하지만 그건 프로그램이 노가다를 한다는 거고.. 우리가 if문으로 입력값의 각 자리수별로 반복문을 만들어줄 수는 없다.
나머지(%) 연산자와 나눗셈(/) 연산자를 활용하면 아주 간단하게 해결할 수 있는 문제이다.
단순한 문제라서 크게 설명할 것이 없다..
혹시나 이해가 안된다고 하더라도 코드를 보면 바로 알 수 있을 것이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNum = Integer.parseInt(br.readLine());
boolean solvedIt = false;
for ( int i=0; i<inputNum; i++ ) {
int temp = i;
int sum = i;
while (temp > 0) {
sum += temp % 10; // i에 i의 각 자리수를 더한다
temp = temp/10;
}
if (sum == inputNum) { // 그 결과가 인풋값과 같으면 정답
System.out.println(i);
solvedIt = true;
break;
}
}
if (!solvedIt) { System.out.println(0); }
}
}
'CS ﹒ Algorithm > Baekjoon' 카테고리의 다른 글
JAVA 백준 문제풀이 (19) 2751: 수 정렬하기2 (0) | 2022.07.15 |
---|---|
JAVA 백준 문제풀이 (18) 2750:수 정렬하기 (0) | 2022.07.14 |
JAVA백준 문제풀이 (16) 17478:재귀함수가 뭔가요? (0) | 2022.07.12 |
JAVA 백준 문제풀이 (15) 2798: 블랙잭 (0) | 2022.07.11 |
JAVA 백준 문제풀이 (14) 10872: 팩토리얼 (0) | 2022.07.10 |