일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬프로그래밍기초
- Scanner class
- MySQL
- 스캐너
- 배열
- 백준알고리즘
- 하드웨어
- 자바
- Scanner
- IF
- 반복문
- 스캐너클래스
- java
- 데이터
- 자료구조
- 변수
- 백준
- IF문
- 유비쿼터스
- 함수
- 기본
- error
- C언어
- FOR문
- for
- 알고리즘
- Spring
- java프로그래밍
- 1차원배열
- IFELSE
- Today
- Total
정리하고기록하자
백준 (JAVA) - 빠른 A+B (15552) 본문
백준 - 알고리즘 for문 빠른 A+B (15552) 문제
문제 :
본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.
문제를 풀기전 BufferedReader 와 BufferedWriter를 공부하자.
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 |