[작성자가 틀린 점]
저 같은 경우에는 216만 생각해서
100의 자리 하나 십의 자리 하나 일의 자리 하나로 하다가
분명 답은 맞는데 안되더라구요..
그래서 알고보니까 십의 자리랑 일의 자리 일 경우 답이 틀려버려서 한참을 해맸습니다..
백준이 이런게 불편한것 같습니다
[해설 및 풀이]
이 문제의 경우는 분해 합이라고 했음으로 각 자리수를 나눠서 그 더한 값이 입력값과 같으면
정답인 아주 심플한 문제지만 이 각자리를 어떤식으로 나누냐에 따라 난이도가 갈릴 수 있는 문제 같습니다.
이러한 자리를 못나눈다면 저도 마찬가지지만
백의 자리 value / 100
십의 자리 value%10/10
..등 이런식으로 나눠서 답이 두자리의 경우와 한자리의 경우 답이 안나와서 한참을 해맸습니다.
여기서 각 자리수를 나눌 수 있는 코드가 있는데요.
바로 반복 값을 돌려서 반복값에 %10을 하면됩니다.
바로 코드로 보겠습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
static StringBuilder sb;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int value = Integer.parseInt(st.nextToken());
int check = check(value);
System.out.println(check);
}
public static int check(int value){
for(int i=1;i<=value;i++){
int sum = i;
int temp = i;
while (temp > 0){
sum = sum + temp%10; // 1. 각 자리수를 더함 198이면 8 (1)
// 2. 다시 19가 들어옴 19 %10 = 9 (3)
// 3. 1%10 = 1 , sum = 198 + 8 + 9 + 1 순 진행
temp = temp/10; // 1. 198 / 10 = 19 (2)
// 2. 19 / 10 = 1 (4)
// 3. 1 / 10 = 0 while문 종료
}
if(sum == value) return i;
}
return 0;
}
}
'백준 알고리즘 > 브루트 포스(완전 탐색)' 카테고리의 다른 글
[백준 셀프넘버 - 4673] 자바 Java [브루트 포스 알고리즘] (1) | 2023.10.06 |
---|---|
[백준 1251 단어 나누기] - Java 자바 [브루트 포스] (1) | 2023.10.02 |
[백준 2003] 수들의 합 2 Java - [투 포인터 , 브루트 포스] (0) | 2023.10.01 |
[백준 1543] - 문서 검색 [자바] 실버 5 (0) | 2023.09.28 |
[백준 2798] 블랙잭 - Java 자바 [1] -풀이 및 해설 (0) | 2023.09.23 |