반응형
은세고화
뚜렷한 기억보단 흐릿한 잉크를
은세고화
전체 방문자
오늘
어제
  • 분류 전체보기 (96)
    • TDD (2)
      • 학점 산출 프로그램 (2)
    • IT (44)
      • 부스트코스 (18)
      • CS50 (3)
      • 도서추천 알고리즘 (2)
      • 스터디 일정 (3)
      • 스프링 (3)
      • 프로젝트 개발 중 발생한 에러 (8)
      • 웹개발 (4)
      • DB (3)
    • 독서 후기 (12)
      • 도서 (12)
    • e북 (3)
    • 알고리즘 (26)
    • 프로젝트 (6)
      • 향수 (6)
    • 회고 (1)

블로그 메뉴

  • 홈

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
은세고화

뚜렷한 기억보단 흐릿한 잉크를

알고리즘

백준 2231 자바

2022. 3. 5. 10:53
반응형

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

아이디어

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 자바  (2) 2022.03.07
백준 1018 체스판 다시 칠하기  (0) 2022.03.07
백준 2636 치즈 자바  (0) 2022.03.05
백준 3085 파이썬  (1) 2021.11.23
백준 1541 파이썬  (0) 2021.11.18
    '알고리즘' 카테고리의 다른 글
    • 백준 2470 자바
    • 백준 1018 체스판 다시 칠하기
    • 백준 2636 치즈 자바
    • 백준 3085 파이썬
    은세고화
    은세고화

    티스토리툴바