문제 풀이/Baekjoon Online Judge

[Baekjoon Online Judge] 11720번: 숫자의 합

hyeonic 2021. 1. 3. 20:08

[Baekjoon Online Judge] 11720번: 숫자의 합

 

11720번: 숫자의 합

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

www.acmicpc.net

 입력 받은 숫자의 각 자리수를 더하는 문제이다. 정수로 해결하게 된다면 자리수보다 큰 수가 들어올 가능성이 높기 때문에 쉽게 오버플로우가 일어날 수 있다. 그렇기 때문에 String을 활용하여 문제를 해결하였다.

 

 문자열로 입력 받은 즉시 split으로 나누어 문자열 배열로 해결하는 방법과 문자열로 받은 뒤 각각의 자리를 char로 뽑아서 정수형으로 바뀐 뒤 더하는 두가지 방식으로 해결하였다.


import java.io.*;

public class Baekjoon11720 {

    public static void main(String[] args) throws IOException {

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(bufferedReader.readLine());
        String[] numbers = bufferedReader.readLine().split("");

        int result = 0;

        for (String number : numbers) {
            result += Integer.parseInt(number);
        }

        bufferedWriter.write(String.valueOf(result));

        bufferedWriter.flush();
        bufferedReader.close();
        bufferedWriter.close();
    }
}

 

 split 메소드를 활용하여 문자열 배열에 저장하였다. 그 다음 문자열 배열의 항목을 탐색하여 정수로 변환 후 결과값 변수에 더해준다. 


import java.io.*;

public class Baekjoon11720 {

    public static void main(String[] args) throws IOException {

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(bufferedReader.readLine());
        String number = bufferedReader.readLine();

        int result = 0;
        for (int i = 0; i < n; i++) {
            result += Character.getNumericValue(number.charAt(i));
        }

        bufferedWriter.write(String.valueOf(result));

        bufferedWriter.flush();
        bufferedReader.close();
        bufferedWriter.close();
    }
}

 

 두 번째 풀이 방식은 문자열로 받은 뒤 각각의 index에 접근하여 result에 더해준다. 여기서 주의할 점은 number.charAt(i)이다. charAt 메소드의 경우 반환 타입이 char이다. 

 

int a = (int)'1';
int b = Character.getNumericValue('1');

System.out.println(a); // 49
System.out.println(b); // 1

 

 char를 int로 변환하는 방식은 여러가지 이다. 두 가지만 소개하자면, 첫 번째 방식은 명시적으로 int 형으로 바꿔주는 것인데, a에 ASCII Code로 1을 의미하는 49를 저장한다. 두 번째 방법은 Character wrapper class의 getNumericValue 메소드를 사용하는 것이다. 이것은 문자의 숫자를 int 숫자 그대로인 1을 저장하는 것을 알 수 있다. 그렇기 때문에 b에 1이란 숫자가 저장된 것을 알 수 있다.