[백준] - 단계별로 풀어보기(반복문) 15552

김민경·2022년 4월 2일
0

백준

목록 보기
11/39

백준 15552번

빠른 A+B

문제 출처 https://www.acmicpc.net/problem/15552


내가 작성한 코드 - (1)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine()); //int
		
		for (int i=1; i<=n; i++) {
		StringTokenizer st = new StringTokenizer(br.readLine()); //띄어쓰기 기준으로 쪼개서 저장
		int a = Integer.parseInt(st.nextToken()); //첫번째 토큰
		int b = Integer.parseInt(st.nextToken()); //두번째 토큰
		System.out.println(a+b);
		}
	}
}

결과

접근 방법

이 문제는 시간 제한이 1초인데 사실 처음에 시간 제한 모르고 Scanner로 풀었다가 시간 초과로 통과하지 못했다. 그래서 BufferedReaderStringTokenizer를 이용해서 풀었다.

여기서 잠깐!

Scanner vs BufferedReader // StringTokenizer

Scanner

  • 공백 or 줄 바꿈을 기준으로 읽는다.
  • 기본적인 데이터 타입을 Scanner의 메소드를 사용하여 입력받을 수 있다.
    ex) next(), nextLine(), nextInt() 등등

BufferedReader

  • 버퍼를 이용하여 읽는 함수이다.
  • Scanner에 비해 상대적으로 빠르다.
  • IOException 예외 처리를 반드시 해주어야한다.
  • readLine()을 이용하여 라인 단위 (한줄)로 읽어올 수 있다. 그리고 받은 데이터를 String으로 고정되므로 다른 타입으로 받고 싶을 경우 가공해야한다.
    ex) Integer.parseInt(br.readLine()) => int형으로 변환

StringTokenizer

  • 문자열을 우리가 지정한 구분자로 쪼개주는 클래스
  • StringTokenizer st = new StringTokenizer(문자열); -> 디폴트가 띄어쓰기 기준
  • StringTokenizer st = new StringTokenizer(문자열,구분자); -> 구분자 설정 가능
  • nextToken() 메소드는 다음 토큰을 읽어 들이는 역할

내가 작성한 코드 - (2)

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()); //int형으로 변환
		
		for (int i=1; i<=n; i++) {
		StringTokenizer st = new StringTokenizer(br.readLine());
		bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + "\n"); //출력
		}
		bw.flush(); //남아있는 데이터를 모두 출력
		bw.close(); //스트림 닫음
	}
}

결과

접근 방법

입출력이 바로 전달되지 않고 데이터를 저장했다가 한번에 출력하기 위해서 System.out.println대신에 BufferedWriter를 이용해보았다.

BufferedWriter

BufferedWriter

  • 버퍼를 이용하여 쓰는 함수이다.
  • 버퍼에 한번에 모았다가 출력이 가능하다.
  • 속도가 빠르다.
  • IOException 예외 처리를 반드시 해주어야한다.
  • write()을 이용하여 출력
  • 반드시 flush()를 이용하여 버퍼를 비워내야하고, close()를 이용하여 스트림을 닫아줘야함.
  • 자동 개행이 없기때문에 필요한 경우 \n을 통해 처리해주어야한다.

0개의 댓글