개발 공부중

[백준] 11720번 문제 - 자바 Scanner/BufferedReader 비교 본문

카테고리 없음

[백준] 11720번 문제 - 자바 Scanner/BufferedReader 비교

개발자 leelee 2023. 8. 10. 07:42

 

방법 1: Scanner로 입력받아 charAt()을 사용하여 계산하는 방법

이 방법은 입력된 문자열에서 각 문자의 숫자 값을 charAt()을 이용하여 가져와서 계산하는 방식입니다. 

예를 들어, 문자 '5'의 아스키 코드 값은 53이며, 문자 '0'의 아스키 코드 값은 48입니다. 그래서 문자 '5'의 숫자 값은 53 - 48이 되어 5가 됩니다. 아스키 코드 값에서 '0' 또는 48을 빼줌으로써 문자를 숫자로 변환합니다. 

이와 같은 방식으로 반복문을 통해 각 숫자 값을 더합니다.

 

charAt() 특징

charAt() 메서드는 문자열에서 특정 위치에 있는 문자(character)를 가져오는데 사용됩니다. 문자열은 문자의 배열로 이루어져 있기 때문에, charAt()을 이용하여 문자열 내의 특정 위치의 문자를 쉽게 접근할 수 있습니다. 

 

코드 예제:

package one;
//Scanner 로 입력받아 charAt() 을 사용하여 푸는 방법

import java.util.Scanner;

public class Test11720 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int count = sc.nextInt();
		String str = sc.next();
		
		int sum = 0;
		for(int i = 0; i< count; i++) {
			
			sum = sum + (str.charAt(i)-'0');
			// charAt() 은 해당 문자의 아스키코드 값을 반환하므로 
			//반드시 -48 또는 -'0' 을 해주어야 우리가 입력받은 숫자 값 그대로를 사용할 수 있다.
		}
		
		System.out.println(sum);

	}

}

 

 

방법 2: BufferedReader로 입력받아 계산하는 방법

이 방법은 BufferedReader를 사용하여 입력을 받고, 문자열의 각 문자 값을 빼서 계산하는 방식입니다. 

read() 메서드를 사용하여 입력 데이터를 읽어들이며, 이 때 '0'을 빼줌으로써 문자를 숫자로 변환합니다. 

이와 같은 방식으로 반복문을 통해 입력 데이터를 순회하며 각 숫자 값을 더하여 결과를 도출합니다.

 

BufferedReader 특징

  • 성능 향상: BufferedReader는 입력 데이터를 한 번에 버퍼에 읽어온 후, 버퍼에서 데이터를 읽어 처리합니다. 이로써 입출력 작업의 효율성이 크게 향상됩니다.
  • 문자 처리: BufferedReader는 문자 기반 입력 스트림을 처리하는 데 최적화되어 있습니다. 문자 인코딩을 자동으로 처리하므로 문자열을 읽을 때 인코딩 변환이 필요 없습니다.
  • 한 줄씩 읽기: readLine() 메서드를 사용하여 한 줄씩 데이터를 읽을 수 있습니다. 이는 텍스트 파일이나 네트워크 소켓 등에서 데이터를 읽을 때 특히 유용합니다.
  • 자동 예외 처리: IOException과 같은 예외를 자동으로 처리하여 코드를 더 간결하게 작성할 수 있습니다.

 

코드 예제:

 

package one;
//br.read()로 데이터를 입력하자마자 바로 계산하여 결과를 출력

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test11720_2 {
	// BufferedReader를 사용하기 위해서는 throws IOException을 해 주어야 함.
	public static void main(String[] args) throws IOException {
		// BufferedReader 선언 및 반복할 문자열 변수 N 선언
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine()); 
		// readLine으로 받은 입력 데이터는 String
		//UTF-16 인코딩에 맞게 각 문자의 값을 저장하므로 반드시 '0' 또는 48 을 빼주어야 한다.
		// 합계 변수 선언
		int sum = 0;
		// 반복문을 사용 입력하면 바로 계산
		for(int i =0; i<n; i++) {
			sum += br.read() - 48;
		}
		// 결과 출력
		System.out.println(sum);
		br.close();
	}

}

 

백준에서 채점해보니 BufferedReader 를 사용한 방법이 시간이 더 짧은 걸 알 수 있었다.

Comments