1. 문제 접근
1) 우선 생성자를 하나 딱 두고 계산을 시작해야한다. 주어진 수에서는 규칙을 찾을 수 없다.
2) 어쨌든 주어진 수 = 생성자 + 생성자 각 자리수이니까 가장 큰 생성자부터 거꾸로 가야 빨리 찾을 수 있을 것 같다.
3) 가장 작은 수를 찾아야하므로 마지막까지 비교하면서 구해준다.
4) 마지막? : 후보가 될 수 있는 최소의 수! 각 자리수에 나올 수 있는 수는 최대 9이다. 그러니까 주어진 수에서, (주어진 수의 길이) * 9만큼을 빼준 값이 후보가 될 수 있는 최소의 수다!
2. 변수
변수 유형 | 변수 이름 | 설명 |
멤버변수(main) | N | 주어진 수 |
nCount | 주어진 수의 길이 | |
멤버변수(main - for) | sum | 생성자와 그 자릿 수의 합을 저장 |
num | 큰 자릿수 부터 계산하기 위한 변수 |
3. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Bronze2_2231_부분합 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int nCount = Integer.toString(N).length();
int answer = Integer.MAX_VALUE;
for(int i = N; i > N - (nCount*9); i--) {
int sum = i;
int num = i;
for(int j = 1_000_000; j >= 10; j /=10) {
sum += num / j;
num %= j;
}
sum += num;
if(sum == N) {
answer = Math.min(answer, i);
}
}
if(answer == Integer.MAX_VALUE) {
sb.append(0);
}else {
sb.append(answer);
}
System.out.println(sb);
}
}
핳 대박 6022명에서 51등 했다..!!!!!!!!!! 짜릿
'알고리즘 풀이 > 백준' 카테고리의 다른 글
백준 2667 - 단지번호 붙이기 (0) | 2022.08.16 |
---|---|
백준 1018 - 체스판 다시 칠하기 (0) | 2022.08.15 |
백준 7568 - 덩치 (0) | 2022.08.14 |
백준 3040 - 백설공주와 일곱 난쟁이 (0) | 2022.08.14 |
백준 브론즈1 색종이 - JAVA (0) | 2022.08.09 |