반응형
https://www.acmicpc.net/problem/2231
아이디어
1부터 N까지 모든 자리수를 더하면서 값을 탐색하면 쉽게 풀리는 문제다.
잘한 부분
문제 자체가 단순하기 때문에 크게 잘한 부분은 없다.
부족한 부분
3번이나 틀렸다. 코드를 좀 더 꼼꼼히 살펴보지 않은 것이 이유다.
첫 번째는 테케 통과 후 틀렸다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[][] arr;
static int[] ans;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
int ans = 0;
int sum = 0;
int i = 0;
while(true) {
i++;
if(sum > N) break;
sum = i;
int num = i;
//각 자리수 더하기
while(num != 0) {
sum += num%10;
num /= 10;
}
if(sum == N) ans = i;
}
System.out.println(ans);
}
}
틀린 결과를 보고 별 생각없이 ans = i에 break를 추가하고 한번 더 틀렸다.
어차피 위에서 sum > N이 break가 될 것이기 때문에 ans문에 break문을 넣을 필요는 없었다.
세번째는 if문이 문제였다. sum > N 이 아니라 i를 비교해야 했다. i로 고치고 제출하니 다시 틀렸다.
sum을 i로 고쳤으면 ans = i코드에 break문을 다시 추가해야한다.
코드를 고쳤다면 다른 로직에 영향이 가는데 그 부분을 조금 대충 본 것 같다.
최종 정답 코드다
package backjon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[][] arr;
static int[] ans;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
int ans = 0;
int sum = 0;
int i = 0;
while(true) {
i++;
if(i > N) break;
sum = i;
int num = i;
//각 자리수 더하기
while(num != 0) {
sum += num%10;
num /= 10;
}
if(sum == N) {
ans = i;
break;
}
}
System.out.println(ans);
}
}
반응형
'알고리즘' 카테고리의 다른 글
백준 2470 자바 (0) | 2022.03.07 |
---|---|
백준 1018 체스판 다시 칠하기 (0) | 2022.03.07 |
백준 2636 치즈 자바 (0) | 2022.03.05 |
백준 3085 파이썬 (0) | 2021.11.23 |
백준 1541 파이썬 (0) | 2021.11.18 |