Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 혼술 술자리 인싸앱
- 내일배움카드
- D-ID
- 바이트디그리
- 불끌때
- #FIFAONLINE4
- 피온4
- 안드로이드 그림판#그림메모장#낙서장
- 독서감상문
- 아두이노#작품#사료급식기
- 강아지 스마트 펜스
- 안드로이드
- 안녕 디지몬
- 안드로이드 #앱개발#계산기
- fifaonline4
- 안드로이드#앱만들기#알바
- Ai
- fifaonline
- 강아지 #박스집 #복층
- 홈CCTV
- 패스트캠퍼스
- 자바 인강
- 박스#강아지집#만들기
- 랜덤스쿼드
- 부르지마세요
- 스쿼드 메이커
- K디지털크레딧
- Java & SpringBoot로 시작하는 웹 프로그래밍
- 부의감각
- 랜덤
Archives
- Today
- Total
LC Studio
백준 15552번 빠른 A+B (JAVA) 본문
Scanner을 사용하여 입력받는 것이 아닌, 더 빠른 방식으로 입력받으라는 문제였다.
(Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.) 라고 나와있었다.
BufferedReader과 BufferedWriter에 대해 잘 몰라 공부하며 해결해 보았다.
package test;
import java.io.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//라인단위로 입력받는 BufferReader 객체 생성
int N = Integer.parseInt(reader.readLine());
StringTokenizer st = null; //라인 입력시 공란을 파싱하기 위한 StringTokenizer 선언
int[] array = new int[N];
int[] sum = new int[N];
for(int i=0;i<N;i++) {
st = new StringTokenizer(reader.readLine());
for(int j=0;j<2;j++) {
array[j] = Integer.parseInt(st.nextToken());
}
int A = array[0];
int B = array[1];
sum[i] = A + B;
}
for(int k=0;k<N;k++) {
System.out.println(sum[k]);
}
}
}
첫번째 시도, 시간초과
eclipse에서는 잘 작동하였다. BufferedReader을 활용하여 작성하기도 했다.
아마, System.out.pritln?을 처리하는데 시간이 많이 걸린 것 같다.
BufferedWriter을 활용해 보았다.
package test;
import java.io.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
//라인단위로 입력받는 BufferReader 객체 생성
int N = Integer.parseInt(bufferedReader.readLine());
//입력받을 줄의 개수 입력받기
StringTokenizer st = null;
//라인 입력시 공란을 파싱하기 위한 StringTokenizer 선언
int[] array = new int[N];
//StringTokenizer을 활용해 파싱된 Token을 저장하기 위한 배열
int[] sum = new int[N];
//파싱된 Token끼리의 합의 저장하기 위한 배열
for(int i=0;i<N;i++) {
st = new StringTokenizer(bufferedReader.readLine());
//i<N일 동안 입력받아라
for(int j=0;j<2;j++) {
array[j] = Integer.parseInt(st.nextToken());
//Token 저장하여라
}
int A = array[0];
int B = array[1];
sum[i] = A + B;
//Token끼리 더하여라
}
bufferedReader.close();
//reader 스트림 종료
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
for(int k=0;k<N;k++) {
bufferedWriter.write(sum[k]+"\n");
// bufferedWriter 는 System.out.println 처럼 자동 개행 처리가 되지 않기 때문에 개행 처리를 따로 해줘야한다.
// bufferedWriter.newLine(); 을 활용하면 개행처리가 가능하나 이건 "\n"에 비해 속도가 느리다고 하니
// "\n" 을 활용해 개행처리를 하는 걸 권장한다. 또한 여기엔 하나의 장점이 더 있는데
// bufferedWriter.write(i); 처럼 writer에 int를 넣으면 아스키 코드에 따른 char형 값이 출력된다.
// 그러나 i와 개행 처리 문자열 "\n" 을 더하면 String 으로 자동 형변환 되기 때문에
// 저장되어 있는 int 값 그대로 출력이 가능하다. 여러모로 이 편이 좋다는 얘기
//주석 출처(https://takeknowledge.tistory.com/44)
}
bufferedWriter.flush(); // 다 사용했으면 남아있는 데이터를 모두 출력시키고
bufferedWriter.close(); // writer스트림 종료
}
}
844ms로 성공했다!ㅎㅎ
반응형
'Java > 백준 알고리즘' 카테고리의 다른 글
백준 4344 평균은 넘겠지 (Java) (0) | 2022.03.15 |
---|---|
백준 8958번 (JAVA) (0) | 2022.03.14 |
백준 3052 나머지(JAVA) (0) | 2022.03.11 |
백준 2577번 숫자의 개수 (0) | 2022.03.11 |
백준 1110번 더하기 사이클 (JAVA) (0) | 2022.03.10 |