ETC/알고리즘

[백준] 백준 3003 Java | BufferedReader, readLine 메소드 feat NumberFormat

JB1104 2022. 11. 21. 18:46
728x90
반응형
SMALL

Java에서 입력받을 때, Scanner 클래스를 이용해서 입력을 받는 연습을 했었다.

 

하지만, 알고리즘 문제를 연습하면 BufferedReader를 더 많이 사용하게 되었다.

알고리즘 문제라 시간이라는 리소스도 포함되고 있기에 조금이나마 차이를 두려고 많이 쓰는 것 같다.

 


 

먼저 BufferedReader와 BufferedWriter에 대해서 간단하게 알고 싶으면 아래 링크를 통해서 조금은 인지하자.

2021.10.27 - [Language/Java] - [JAVA] BuffredReader & BufferedWriter

 

[JAVA] BuffredReader & BufferedWriter

BufferedReader라는 단어에서 볼 수 있듯이 'Buffer : 완충제' 역할을 하는 버퍼를 이용해서 읽는 함수 이다. 이 함수는 버퍼를 이용하기 때문에 이 함수를 이용하면 입출력의 효율이 좋아진다고 한다.

aroma-bok.tistory.com

 

 

public class Chess {

	public static void main (String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int king = 1;
		int queen = 1;
		int rok = 2;
		int beshop =2;
		int night = 2;
		int pone = 8;
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		king = king - Integer.parseInt(st.nextToken());
		queen= queen - Integer.parseInt(st.nextToken());
		rok = rok - Integer.parseInt(st.nextToken());
		beshop= beshop - Integer.parseInt(st.nextToken());
		night= night - Integer.parseInt(st.nextToken());
		pone= pone - Integer.parseInt(st.nextToken());

		System.out.print(king + " ");
		System.out.print(queen + " ");
		System.out.print(rok + " ");
		System.out.print(beshop + " ");
		System.out.print(night + " ");
		System.out.print(pone + " ");
		
		
	}
}

 

위 코드의 결과는 아래처럼 잘 나온다.

한 줄로 받아옴

 

하지만 처음에 필자가 실수했던 코드는 아래와 같다.

public class Chess {

	public static void main (String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int king = 1;
		int queen = 1;
		int rok = 2;
		int beshop =2;
		int night = 2;
		int pone = 8;
		
		king = king - Integer.parseInt(br.readLine());
		queen= queen - Integer.parseInt(br.readLine());
		rok = rok - Integer.parseInt(br.readLine());
		beshop= beshop - Integer.parseInt(br.readLine());
		night= night - Integer.parseInt(br.readLine());
		pone= pone - Integer.parseInt(br.readLine());
		
		System.out.print(king + " ");
		System.out.print(queen + " ");
		System.out.print(rok + " ");
		System.out.print(beshop + " ");
		System.out.print(night + " ");
		System.out.print(pone + " ");

	}
}

 

 

문제는 'Integer.parseInt(br.readLine());' 이 부분이다. 이 코드가 정상적으로 실행되려면

 

아래처럼 값이 입력되어야 한다.

하나씩 받아옴

 

하지만 문제에서는 하나의 열로 (한 줄)로 받아오기 때문에 이렇게 제출하면 NumberFormat 오류가 발생한다.

한 줄로 값을 넣으면 Exception 발생

 

즉, 주어진 입력값을 잘 보고 거기에 맞게 사용하여한다.

728x90
반응형
LIST