1 minute read

정수를 문자열로 입력받는 문제. Python처럼 정수 크기에 제한이 없다면 상관 없으나, 예제 3은 일반적인 정수 자료형에 담기에 너무 크다는 점에 주목합시다.

문제 :

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

입력 :

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

예제입력 :

입력
5
54321
출력
15

FLOW :

  1. Scanner를 통해 입력값을 입력받아서 사용
  2. 첫번째 입력받은 int 크기의 String 배열을 만들어 줌 -> numberList
  3. 다음 숫자는 String 으로 입력받음 -> number
  4. 문자열을 자르는 substring을 사용하면 반복문으로 한자리씩 배열에 넣어줄 수 있을꺼라고 생각함
  5. 각 자리의 숫자를 Integer.parseInt를 통해 int로 바꿔주어 합계를 구함
import java.util.Scanner;

public class Main {
	public static void main(String args[]) {
		Scanner scan = new Scanner(System.in);
		
		int n = scan.nextInt();
		String number = scan.next();
		String[] numberList = new String[n];
		
		int sum = 0;
		
		for(int i = 0; i<n; i++) {
			numberList[i] = number.substring(i, i+1);
			sum += Integer.parseInt(numberList[i]);
		}
		System.out.println(sum);
	} 
}
  • BufferedReader를 사용한 다른 풀이 (Reference)
  • 테스트 결과 2배 빠름 👍🏽

getBytes() 를 통해 쉽게 각 자릿값을 반환 받을 수 있다. String (문자열) 에 대하여 해당 문자열을 하나의 byte 배열로 변환해주는 메소드다.

즉, readLine() 으로 읽어들인 문자를 byte[] 로 변환하여 반환되므로 for-each 구문을 통해 문자열의 문자를 하나하나씩 읽어들일 수 있다.

이때 말했듯이 UTF-16 인코딩에 맞게 각 문자의 값을 저장하므로 반드시 ‘0’ 또는 48 을 빼주어야 한다.

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));
		br.readLine(); //N은 쓸모가 없으므로 입력만 받는다.
		
		int sum = 0;
		
		for(byte value : br.readLine().getBytes()) {
			sum+= (value - '0');
		}
		System.out.println(sum);
	} 
}

Reference 📝

https://st-lab.tistory.com/61

Leave a comment