정리하고기록하자

백준 (JAVA) - 빠른 A+B (15552) 본문

백준 - 알고리즘

백준 (JAVA) - 빠른 A+B (15552)

정리하고기록하자 2021. 11. 3. 00:09
반응형

백준 - 알고리즘 for문 빠른 A+B (15552) 문제

 

문제 :

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.

Java를 사용하고 있다면, Scanner System.out.println 대신 BufferedReader BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.

 

문제를 풀기전 BufferedReaderBufferedWriter를 공부하자.

BufferedReader는 Enter만 경계로 인식한다.

받은 데이터가 String으로 고정되기때문에 입력받은 데이터를 가공하는 작업이 필요한경우가 많다.

Scanner에 비해 사용이 불편하다.하지만 많은 양의 데이터를 입력받을경우 BufferedReader를 통해 입력받는 것이 효율면에서 낫다.


BufferedReader 사용법

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); // 선언
String a = bufferedReader.readLine(); // String
int i = Integer.parseInt(bufferedReader.readLine()); // Int

입력은 readLine() 메서드를 사용한다. 

readLine() 메서드를 사용할때 주의할점

1. 리턴값을 String으로 고정되기 때문에 String이 아닌 다른타입으로 입력 받으려면 형변환이 필요하다.

2. 예외처리를 꼭 해주어야한다. readLine()을 할때마다 try & catch를 활용하여 예외처리를 해도 되지만 throws IOException을 통해서 작업한다.


BuferedWriter 사용법

BuferedWriter buferedWriter = new BufereWriter(new OutputStreamWriter(System.out));
String s = "abcd";
buferedWriter.write(s); // 출력
buferedWriter.newLine(); // 다음줄 바꿈
buferedWriter.flush(); // 남아있는 데이터를 모두 출력시킴
buferedWriter.close(); // 스트림을 닫음

BuferedWriter의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush() / close() 를 호출해 주어 뒤처리를 해주어야 한다.

그리고 BuferedWriter .write에는 System.out.println(); 과 같이 자동개행기능이 없기 때문에 개행을 해주어야할 경우에는 \n를 통해 따로 처리해 주어야 한다.


입력 : 첫 줄에 테스트케이스의 개수 T가 주어진다.

라고 했기 때문에 int 로 형변환해 선언해준다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
		int N = Integer.parseInt(br.readLine());
        
		br.close();
        
		bw.flush();
		bw.close();
 
	}
}

StringTokenizer긴 문자열을 지정된 구분자를 기준으로 문자열을 자르는데 사용한다.

ex ) 100 , 200 , 300 , 400 의 문자를 , 구분자를 기분으로 자르게 되면 4개의 문자열을 얻을 수 있다.

 

StringTokenizer 사용법

public static void main(String[] args){
	String num = "100,200,300,400";
    StringTokenizer st = new StringTokenizer(source, ",");
    
    while(st.hasMoreTokens()){
    	System.out.print(st.nextToken());
    }
}

 

결과값

100
200
300
400

 StringTokenizer st;
 for (int i = 0; i < N; i++) {
 	st = new StringTokenizer(br.readLine()," ");
 	bw.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()))+ "\n");
 }

을 추가 하여

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
 
		int N = Integer.parseInt(br.readLine());
        
		StringTokenizer st;
 
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine()," ");
			bw.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()))+ "\n");
		}
		br.close();
        
		bw.flush();
		bw.close();
 
	}
}

를 완성했다.

 

이번 문제는 구글링 해서 공부했고,

BufferedReader , BufferedWriter , StringTokenizer 에 대해서 공부했다.

아직도 난 JAVA에 대해 모르는게 너무 많다.

이해하기도 어렵다.

반응형

'백준 - 알고리즘' 카테고리의 다른 글

백준 (JAVA) - 기찍 N (2742)  (3) 2021.11.04
백준 (JAVA) - N 찍기 (2741)  (0) 2021.11.04
백준 (JAVA) - 합 (8393)  (0) 2021.10.19
백준 (JAVA) - A+B-3 (10950)  (0) 2021.10.19
백준 (JAVA) - 구구단 (2739)  (0) 2021.10.18