티스토리 뷰
keyword : 자릿수합
difficulty : 하
completion : ✅
notice :
분해합
📝 문제
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
출력
첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.
예제 입력 1
216
예제 출력 1
198
🔍 정답
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
ArrayList<Integer> M = new ArrayList<>();
for (int i = 1; i <= N; i++) {
if (sum(i) == N) {
M.add(i);
System.out.println(i);
break;
} else M.add(0);
}
if (Collections.max(M) == 0) System.out.println(0);
}
public static int sum(int num) {
int result = num;
while (num > 0) {
result += num % 10;
num /= 10;
}
return result;
}
}
- i = 1 부터 대입을 해보면서 N이 나오면 i 를 반환하고 나오지 않으면 0을 반환하면 되겠다 생각하고 시작을 했다.
- sum 함수는 1부터 대입하는 함수로 매개변수 num은 생성자이고 result는 분해합이다.
- 1부터 대입하면서 result(분해합)이 N과 같다면 그 분해합의 num(생성자)를 출력하고 break; 하였다.(최솟값만 출력하면 되므로)
- 배열은 0을 어떻게 출력해야 될까 고민하다가 만든 것인데,
- N = 8이라면, ArrayList M = [0, 0, 0, 4] 이런식으로 만들어질 것이고
- N = 7이라면, [0, 0, 0, 0, 0, 0, 0] 이 될 것이다.
- 만약 result(분해합)이 N과 같은 게 없으면 생성자가 없는 숫자이므로 배열은 모두 0으로 채워질 것이고 이는 곧 배열의 가장 큰 수가 0이라는 소리이기 때문에, 이런 경우 0을 출력하도록 하였다....
- 풀고나서 다른 풀이를 보니 int 변수 = 0; 을 하나 선언해놓고 생성자가 있으면 그 생성자를 변수에 넣고 그렇지 않으면 그대로 0을 출력하도록 하였는데.. 보고나니까 왜 리스트를 만들고 별 난리를 쳤는지 현타가 왔다 ㅠㅠ
- 기본기가 중요하다는 것을 다시 느꼈다 ㅠㅠ
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 N = Integer.parseInt(br.readLine());
int answer = 0;
for (int i = 1; i <= N; i++) {
if (sum(i) == N) {
answer = i;
break;
}
}
System.out.println(answer);
}
public static int sum(int num) {
int result = num;
while (num > 0) {
result += num % 10;
num /= 10;
}
return result;
}
}
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 소수찾기(백준1978번) (0) | 2022.10.19 |
---|---|
[알고리즘] 평균(백준1546번) (0) | 2022.10.18 |
[알고리즘] 손익분기점(백준1712번) (0) | 2022.10.13 |
[알고리즘] 단어의 개수(백준1152번) (0) | 2022.10.12 |
[알고리즘] 상수(백준2908번) (0) | 2022.10.11 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바트리
- 알고리즘
- SQL
- SQLD
- 자바dp
- BFS
- 리액트
- Algorithm
- 백준
- dfs
- 자바
- JPA
- JavaScript
- 정렬
- 자바스크립트
- CS
- DP
- java
- 스프링부트
- Nest
- Spring
- Comparator
- 형변환
- 프로그래머스
- 타입스크립트
- Queue
- 이분탐색
- 스프링
- 자바bfs
- 해시맵
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함