문제링크: https://www.acmicpc.net/problem/15552
풀이출처/ 소스코드 출처: https://whereisusb.tistory.com/270?category=746475
BufferReader와 Writer 출처: https://coding-factory.tistory.com/251
StringTokenizer 출처: https://hunit.tistory.com/166
풀이1( 내가 작성)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import java.io.*;
import java.util.StringTokenizer;
public class Ex15553 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for(int i=0;i<n;i++){
StringTokenizer st = new StringTokenizer(br.readLine());
bw.write(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())+"\n");
}
bw.close();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Ex15553 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int i=0;i<n;i++){
StringTokenizer st = new StringTokenizer(br.readLine());
sb.append(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())+"\n");
}
System.out.println(sb);
}
}
|
- 문제는 쉬운데, 자꾸 시간 초과 발생 + 맨날 Scanner 그만 쓰고 BufferedReader 써야지 다짐만 했던 지난날을 반성하며 포스팅
* JAVA에서는 Scaaner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용 할 수 있다.
일명 버퍼류라 불리는 이것들이, 더 수행 속도가 빠르다.
1. BufferedReader
1) BufferedReader 선언하기
1
2
3
|
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = bf.readLine(); //String
int i = Integer.parseInt(bf.readLine()); //Int
|
- .readLine(); : 입력 할 때 사용하는 메서드
- String으로 리턴 되기 때문에, 다른 타이브로 입력 받으려면, 꼭 형변환을 해준다.
- try~catch 문을 사용한 예외 처리를 꼭 해준다. ( readLine을 할 때마다 예외처리를 해줌, 대부분 throw IOEException )
2) 데이터 가공하기: Read한 데이터는 라인 단위로만 나눠진다. 공백단위 데이터 가공하려면 따로 split 해주어야 한다. 혹은 StringTokenizer 사용한다.
1
2
3
4
5
|
StringTokenizer st = new StringTokenizer(s);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
String array[] = s.split(" ");
|
- s.split("구분자"); : 자바에서 지원하는 String의 기본 메서드 중 하나. '구분자''를 기준으로 문자열을 파싱. 위의 소스코드 대로하면, 문자열 s의 공백 기준으로 파싱되어 배열 array에 예쁘게 순차적으로 저장 될 것이다.
- StringTokenizer 는 하단에 따로 설명.. 왜냐면 내가 잘 안쓰는 것이기 떄문에...기록이 필요하다 ^_ㅠ
2. BufferedWriter
1) BufferedWriter 사용법
1
2
3
4
5
|
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//선언
String s = "String for print";
bw.write(s+"\n"); // 문자열 s를 출력한다.
bw.flush(); // 남아있는 데이터를 모두 출력한다.
bw.close();// sc.close()와 유사
|
- BufferedWriter는 이름 처럼 버퍼를 잡아놓은 것 > 따라서, flush(), close()를 반드시 호출해 수행작업을 완료시켜야 함
- bw.write() : 자동개행이 없음. 개행 필요 할 경우 +"\n" 해준다.
3. StringTokenizer
- String 클래스의 메소드인 split은 파싱한 문자를 배열로 저장
- StringToknizer는 메소드가 아닌 java.util에 포함되어 있는 자체 클래스
- 문자열을 '토큰'이라고 일컫는다.
> 따라서, split과 사용하는 방법이 다르고, StringToknizer 내부에 꼭 넣어야 하는 메소드가 존재
1
2
3
4
|
StringTokenizer st = new StringTokenizer(s);
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
|
리턴타입 |
메소드 |
기능 |
int |
countTokens |
마지막으로 토큰을 읽어오기 전 남아있는 토큰의 수 |
boolean |
hasMoreTokens |
토큰 남아있으면 True, 없으면 False |
String |
nextToken |
토큰 읽어오기 |
4. StringBuilder...
점점 길어지는 포스팅...
+ 문자열에 관한.. 종류가 이렇게 많았던가? 이분이 참 잘 정리해주셨다. 공부할 때 참고하자!
'개발 이야기 > 알고리즘' 카테고리의 다른 글
[코딩인터뷰] 1. big-O (0) | 2019.09.17 |
---|