실습/백준

숫자의 합 - 11720번 (Java 풀이)

chobyeonggyu03 2024. 7. 16. 22:58
반응형

문제

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

 

 

 

 

내가 이 문제를 처음 봤을 때 가장 중요하게 생각했던 핵심포인트는  '긴 숫자를 어떻게 하나의 숫자로 인식하지 않고 1문자씩 끊어서 입력받는지'였다, 그렇기에 해당 풀이법으로 가장먼저 떠올랐던 건 처음에 입력받은 숫자를 문자열로 인식받아 charAt과 반복문을 활용하여 숫자를 하나의 문자로 입력받고 반복문을 순회할때 각각 int형으로 형변환 후, total 변수에 더하는 식의 로직이었기에 해당 방법으로 풀이를 진행하였다.

 

 

package BAEKJOON_11720;

/*
 날짜 : 2024.07.16.화
 내용 : 백준 11720번 문제 (숫자의 합)
 */

import java.util.*;

public class BAEKJOON_11720 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int total = 0;										// 총합을 구하기 위한 변수선언
		int n = sc.nextInt();
		sc.nextLine();										// nextLine을 활용하여 \n 문자 제거하기
		
		
		String str = sc.nextLine();							// 하나의 긴 숫자를 문자열로 입력받기
		
		for (int i=0; i<n; i++) {							// 반복문을 순회하며 1자리마다 char형으로 변환후 다시 int형으로 변환하여 total 변수에 더하기
			total += (int)str.charAt(i);
		}
		
		System.out.println(total);							// 각 자리의 숫자들을 더한 총합 출력
	}

}

 

 

 

 

 

 

하지만 문자열을 Int형으로 형변환 하는 과정에서 아스키코드와 같은 형태로 변환되는 에러사항이 존재하였기에 이를 해결하기 위해 다른방법을 찾아보던 중 아스키 코드에서 0~9까지의 숫자는 모두 연속되어있고 0은 48,  1은 49, 2는 50 이런식으로 48부터 시작하여 57까지 연속되어 있다는 사실을 알게되었고, 숫자만 입력받는 로직이기에 -48을 해주면 0은0, 1은1, 2는2, 9는9로 대응되게 할 수 있어 해당 방법으로 코드를 고치게 되었다.

 

 

 

package BAEKJOON_11720;

/*
 날짜 : 2024.07.16.화
 내용 : 백준 11720번 문제 (숫자의 합)
 */

import java.util.*;

public class BAEKJOON_11720 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int total = 0;										// 총합을 구하기 위한 변수선언
		int n = sc.nextInt();
		sc.nextLine();										// nextLine을 활용하여 \n 문자 제거하기
		
		
		String str = sc.nextLine();							// 하나의 긴 숫자를 문자열로 입력받기
		
		for (int i=0; i<n; i++) {							// 반복문을 순회하며 1자리마다 char형으로 변환후 다시 int형으로 변환하여 total 변수에 더하기
			total += (int)str.charAt(i) - 48;
		}
		
		System.out.println(total);							// 각 자리의 숫자들을 더한 총합 출력
	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형