will come true

[BOJ] 백준 10951번 - A+B 본문

Algorithm

[BOJ] 백준 10951번 - A+B

haehyun 2021. 11. 9. 17:17
728x90

문제

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

 

10951번: A+B - 4

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

핵심 키워드

  • 입출력 I/O
  • Scanner
  • BufferedReader
  • StringTokenizer

 

Scanner를 사용한 코드

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		while (sc.hasNextInt()) {
			int a = sc.nextInt();
			int b = sc.nextInt();
			System.out.println(a + b);
		}
	}
}
  • nextInt() : 정수값 단위로 입력받는다.
  • nextLint() : 라인단위로 입력받는다.
    => 한 줄에 여러 값이 공백으로 구분되어 있을 경우공백을 구분자로 잘라야 한다.

 

BufferedReader를 사용한 코드

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

public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		String str;
		
		while((str = br.readLine()) != null) {
			st = new StringTokenizer(str, " ");
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			
			sb.append(a + b).append("\n");
		}
		
		System.out.println(sb);
	}	
}
  • Scanner 클래스의 nextInt()와 같은 메서드가 없기 때문에 readLine()을 사용해 라인 단위로 입력받는다.
  • 읽어들인 하나의 라인(String)에서 공백을 구분자로 데이터를 자른다.
    • new StringTokenizer(str, " ") : str을 공백을 기준으로 토큰이라는 여러 개의 문자열로 잘라낸다. StringTokenizer 객체 반환, nextToken()으로 값 접근 가능

 

학습 내용

Java 입출력 방법

  • java.io.BufferReader
  • java.util.Scanner
  • java.io.Console : 화면 입출력 전문 (콘솔창)
// JDK1.5 이전
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();

// JDK1.5 이후(java.util.Scanner)
Scanner s = new Scanner(System.in);
String input = s.nextLine();

// JDK1.6 이후(java.io.Console)
Console console = System.console();
String input = console.readLine();

 

java.util.Scanner 클래스

  • 화면, 파일, 문자열과 같은 입력소스로부터 문자데이터를 읽어올 수 있다.
  • 정규식을 이용한 라인단위 검색이 가능하며, useDelimiter() 메서들 사용해 구분자 지정 가능.
  • nextInt(), nextLong(), nextDouble() 등 메서드를 사용하면 바로 특정 타입 입력을 받을 수 있다.
    입력 타입에 어긋날 시 예외(InputMismatchingException) 발생
//Scanner 생성자
Scanner(String source)
Scanner(File source)
Scanner(InputStream source)
Scanner(Readable source)
Scanner(ReadableByteChannel source)
Scanner(Path source)

 

java.io.BufferedReader 클래스

  • 버퍼를 이용해서 입출력의 효율을 높일 수 있도록 해주는 역할.
  • readLine() 메서드를 사용해서 입력을 라인 단위로 읽을 수 있다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String line = "";
while((line = br.readLine()) != null){
	System.out.println(line);
}

 

java.io.InputStreamReader

  • 바이트기반 스트림을 문자기반 스트림으로 연결시켜주는 역할
  • 바이트기반 스트림의 데이터를 지정된 인코딩의 문자데이터로 변환해주는 작업을 수행.
메서드 설명
InputStreamReader(InputStream in) OS에서 사용하는 기본 인코디으이 문자로 변환하는 InputStreamReader를 생성한다.

 

String 문자열을 구분자로 자르는 방법

  • StringTokenizer 클래스
  • String의 split(String regex) 메서드 사용
  • Scaner의 userDelimeter(String pattern) 메서드 사용

 

java.util.StringTokenizer 클래스

  • 긴 문자열을 지정된 구분자(delimeter)를 기준으로 토큰(token)이라는 여러 개의 문자열로 잘라내는 데 사용.
  • 구분자로 단 하나의 문자밖에 사용할 수 없기때문에 정규식 사용 불가.
    ex) StringTokenizer st = new StringTokenizer(str, "+-*/=()");
    => 구분자는 "+-*/=()" 문자열이 아니라, '+', '-', '*', '/', '=', '(', ')' 개별 문자 모두가 하나씩 구분자.
  • StringTokenizer로 자른 각 문자열(token)로 다시 StringTokenizer을 생성해서 다시 한번 특정 구분자로 자를 수 있다.
    ex) String str = "1, 김감귤, 100, 100, 100 | 2, 이딸기, 90, 95, 100 | 3, 박수박, 100, 50, 100";
메서드 설명
StringTokenizer(String str, String delim) 문자열을 지정된 구분자로 나누는 StringTokenizer를 생성.
구분자는 토큰에서 제외됨.
Stringtokenizer(String str, String delim, boolean returnDelim) 문자열을 지정된 구분자로 나누는 StringTokenizer를 생성.
returnDelim의 값을 true로 하면 구분자도 토큰에 포함됨.
int countTokens() 전체 토큰의 수를 반환
boolean hasMoreTokens() 토큰이 남아있는지 여부 반환
String nextToken() 다음 토큰 반환. (구분자를 기준으로 잘린 문자들에 접근)

 

728x90
Comments