Algorithm/Baekjoon(Java)

[백준/JAVA] 11720 : 숫자의 합 ( char - '0', 48 )

비망노트 2022. 7. 23. 12:31
문제

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

입력

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

 

출력

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

 

예제 입력 예제 출력
1
1
1
5
54321
15
25
7000000000000000000000000
7
11
10987654321
46

 

⭕ 풀이1

import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args)throws IOException{
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int tc = Integer.parseInt(br.readLine());
        String[] numArr = br.readLine().split("");
        int sum = 0;
        for(int i=0;i<tc;i++){
            sum += Integer.parseInt(numArr[i]);
        }
        System.out.print(sum);
    }
}

⭕ 풀이2

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 tc = Integer.parseInt(br.readLine());
        char[] numArr = br.readLine().toCharArray();
        br.close();
        
        int sum = 0;
        for(int i = 0; i < tc; i++) {
            sum += numArr[i]-48;
        }
        System.out.print(sum);
    }
}

✅ 우선 모든자리를 더해야하는 숫자의 개수를 알려준다.

이를 tc로 받아서 반복문의 조건으로 사용할것이다.

다음은 두번째줄에 주어지는 숫자를 모두 더하는것인데

StringTokenizer 로는 공백없이 붙어있는 문자열은 분리 시킬 수 없다.

1번풀이는

split("")을 사용해 문자열 배열로 받은 뒤 배열의 각 인덱스를

반복문안에서 integer타입으로 형변환 시킨 뒤 sum에 누적시키는 형태이고

 

2번풀이는

br.readLine()으로 두번째 줄을 받을때 문자열을 char타입 배열로 반환시키는 toCharArray를 사용해

char타입 배열 numArr를 만들었다.

이후 반복문에서는 char타입에서 48을 뺀값을 sum에 누적시키는 형태이다.

 

✅ char - '0'  혹은 char - 48 ; char타입을 int형으로 바꾸기

우선 아스키코드에서 char타입 '0'은 숫자 48과 같다.

즉 - '0' 을하건 - 48 같은 결과가 나올것이라는 소리이다.

public class Main {
  public static void main(String[] args) {
    String str = "12345";

    char[] arr = str.toCharArray();

    System.out.println(arr[2]);      // 3 char
    System.out.println(arr[2]- 0);   // 51 int
    System.out.println(arr[2]-'0');  // 3 int
    System.out.println(arr[2]-'0'+5);// 8 int
  }
}

❗ 예제를 만들어봤는데 살펴보도록하자.

우선 아무런 처리를 하지 않은 arr[2]는 char타입 '3'이다.

여기서 숫자0을 뺀다면 char '3'이 가리키고있는 정수 51이 나오게되고

char타입 '0' 을 뺀다면 '3'이 가리키고있던 51에서 '0'이 가리키는 48을 뺀 뒤 정수3을 출력시키게된다.

 

 

 

-출처

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