본문 바로가기

알고리즘/문제 풀이

백준 11720_숫자의합 Java 여러가지 풀이!

1. 문제 설명

[문제 링크](https://www.acmicpc.net/problem/11720)

문제

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

입력

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

출력

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

예제 입력 1 복사

1
1

예제 출력 1 복사

1

2. 접근 방식

  • 숫자는 모두 한 자릿수 이다. 길이가 10인 배열을 만들어서 index -> 숫자, value -> 숫자의 개수를 저장한다.
  • String 문자열 한 줄로 들어온 숫자들을 모두 체크한 이후에, 길이 10의 배열을 순회하면서 index* value의 총합을 구한다.

3. 코드 분석

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 n = Integer.parseInt(br.readLine());
        String line = br.readLine();
        int sum = 0;
        for (int i = 0; i < line.length(); i++) {
            sum += (line.charAt(i) - '0');
        }

        System.out.println(sum);

    }
}

4. 성장하기

`char -> int 변환법`

char a = '3'; 이라고 하자.

ⓐ int b = Character.getNumericValue(a) 해당 함수는 문자가 뜻하는 의미 그대로의 숫자로 변경해준다. 3 -> 3 ⓑ int b = a -'0' 문자는 아스키 코드 값으로 이루어져 있다. 만약 (int) a 로 강제 형변환 하면 a = 51의 결과가 나온다. 왜냐하면 아스키 코드에서 3의 값이 51이기 때문이다. 따라서 3이라는 의미를 유지하면서, int 형으로 바꾸려면 51 - 48을 직접 해서 3을 구하면 된다. '0'의 아스키 코드 값이 48임으로 이를 이용하여 진짜 숫자와 아스키코드의 격차인 48을 제거해준다.

5. 다시 풀기

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 n = Integer.parseInt(br.readLine());
        String line = br.readLine();
        int sum = 0;
        for (int i = 0; i < line.length(); i++) {
            sum += (line.charAt(i) - '0');
        }

        System.out.println(sum);

    }
}

배열 안 쓰고 바로 값을 더해서 구했다.