본문 바로가기

백준/브론즈 탈출하기

[Java] 백준 11720번 : 숫자의 합

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

예제 입력 1 복사

1
1

예제 출력 1 복사

1

예제 입력 2 복사

5
54321

예제 출력 2 복사

15

예제 입력 3 복사

 

25
7000000000000000000000000

예제 출력 3 복사

7

예제 입력 4 복사

11
10987654321

예제 출력 4 복사

46

 

 

생각보다 더 많이 틀렸던 문제

3번 세번째 시도에 정답코드 있습니다.

 

 

1. 첫번째 시도 : 10으로 나눠서 숫자의 합(오답)

package test;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt(); // 첫줄 숫자 개수
        int num = sc.nextInt();
        int total=0;
       
        while(num>0) {
        	total += num % 10;
        	
        	num /= 10;
        }
        System.out.printf("%d", total);
    }
}

틀린 이유 :

25
7000000000000000000000000

입력시 런타임 에러 발생

 

2. 두번째 시도 : 정수로 입력 받아서 문자열로 변경, 문자열을 쪼개서 배열로 저장 (오답) 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt(); // 첫줄 숫자 개수
        int num = sc.nextInt();

        String str = String.valueOf(num); // 정수를 문자열로 변경 
        char[] charArray = str.toCharArray(); // 문자열을 쪼개서 배열로 저장

        int sum=0;
      for(int i=0; i<charArray.length; i++){
        sum += charArray[i] - '0'; // 아스키 코드 '0' = 48, 0(48) - 0(48) = 0
      }
        
          
        
        System.out.printf("%d", sum);
    }
}

틀린 이유 :

25
7000000000000000000000000

입력시 런타임 에러 발생

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt(); // 첫줄 숫자 개수
        String num = sc.next();
        sc.close();
          
        int sum=0;
      for(int i=0; i<N; i++){
        sum += num.charAt(i) - '0'; // 아스키 코드 '0' = 48, 0(48) - 0(48) = 0
      }
        
          
        
        System.out.printf("%d", sum);
    }
}

- Java의 문자열은 기본적으로 크기 제한이 없어서 메모리가 허용하는 한 아주 큰 문자열을 처리할 수 있다. (chatGPT)

- 하여 String 클래스를 사용하여 동적으로 크기를 조절

- 25 / 7000000000000000000000000 입력시에도 연산 가능

 

주의) 대용량 데이터를 처리할 때는 메모리 관리 고려 중요

 

 

교훈 : 문제에 주어진 입력을 반드시 모두 넣어봐야겠다.