일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 맥북
- 문자열 숫자 변환
- 깃허브
- 자바
- 해시
- Android Studio
- OAuth 인증
- 백준
- sort정렬
- 27866
- MAC OS
- SQL코딩테스트
- HashMap
- 포맷 지정자
- Iterator
- JDK
- M1
- 알고리즘
- 가격이 제일 비싼 식품의 정보 출력하기
- 프로그램서
- 프로그래머스
- 코딩테스트
- Eclipse
- homebrew
- github
- Java
- 안드로이드 스튜디오
- 핸드폰 가리기
- 노선별 평균 역 사이 거리 조회하기
- mysql
- Today
- Total
개발일지
[백준 JAVA] 15552번: A + B / #11021번: A + B - 7 /#11022번: A + B - 8 본문
[백준 JAVA] 15552번: A + B / #11021번: A + B - 7 /#11022번: A + B - 8
O'mil 2023. 1. 29. 03:22#15552번: A + B
문제
풀이
- 기존에 사용했던 System.out.print과 Scanner를 사용하면 시간이 초과 된다.
- 알고리즘 문제를 풀 때가 아니면 사용할 일 없을 거라고 생각했던 Buffer를 다시 꺼내 들었다.. (미리미리 공부 좀 하자)
방법 1. BufferedReader, BufferedWriter 사용하기
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main_15552 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // BufferedReader 쓰는 법
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // BufferedWriter 쓰는 법
int N = Integer.parseInt(br.readLine()); // 테스트케이스의 개수
// 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");
// st.nextToken()은 문자열을 반환하므로 Integer.parseInt()를 이용해 int형으로 바꿔줘야 함
}
br.close();
bw.flush(); // 출력
bw.close();
}
}
flush()
flush()
BufferedWriter는 class 내부에 Buffer 공간을 두고 출력물들을 쌓아놓았다가 flush()를 통해 버퍼를 비우면서 출력을 한다.
바로바로 출력을 하고 싶다면 반복문 안에 bw.flush()를 써주면 되지만 그렇게 하면 System.out.println()과 다른 점이 없기 때문에
반복문이 끝난 후 한 번에 모아 출력을 해주는 것이다.
StringTokenizer()
StringTokenizer()
- 사용자가 지정하는 구분자를 경계로 하여 문자열을 나눠주는 Class.
- 만약 사용자가 구분자 지정을 생략하면 공백이나 탭이 기본 구분자로 사용된다. (구분자는 2번째 인수 사용 / 구분자 여러개 지정 가능)
- 3번 째 인수로 구분자를 토큰에 포함할지 여부를 선택할 수 있다. (생략시 포함 안 함 (false) / true or false 선택)
StirngTokenizer st = new StringTokenizer(a, " "); // 공백을 구분자로 사용
StirngTokenizer st = new StringTokenizer(b, ".,"); // "."과 ","을 구분자로 사용
hasMoreToken()
- StringTokenizer클래스 객체에서 다음에 읽어 들일 token이 있으면 ture, 없으면 false를 반환한다.
while(a.hasMoreToken()) {}
nextToken()
- StringTokenizer클래스 객체에서 다음 토큰을 읽어들인다.
while(a.hasMoreToken()) {
System.out.println(a.nextToken());
}
- a.hasMoreToken()을 이용해 읽어들일 token이 있는지 확인하고 있으면 ture 반환 -> while문 실행
- System.out.println()문을 이용해 다음 토큰 출력
출력 결과
#11021번: A + B - 7
문제
풀이
- System.out.println()을 사용할 수도 있지만 익숙해지려 Buffer을 이용해서 풀어보았다.
추가
코드
import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main_11021 {
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 = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine(), " ");
bw.write("Case #" + i + ": " + Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
결과
- 결과가 이상하게 나왔다.
- 앞에 Case #~~~~를 붙였더니 뒤에 입력받은 숫자들을 덧셈이 아닌 나열로 인식 한 것 같다.
for ( int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine(), " ");
//bw.write("Case #" + i + ": ");
bw.write("Case #" + i + ": " + (Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())) + "\n");
}
- 괄호를 쳐서 해결했다.
그냥 바보였음
import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main_11021 {
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 = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine(), " ");
bw.write("Case #" + i + ": ");
bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
#11022번: A + B - 8
문제
풀이
import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main_11022 {
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 = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
bw.write("Case #" + i + ": " + a + " + " + b + " = " + (a + b) + "\n");
}
bw.flush();
br.close();
bw.close();
}
}
참고)
https://tragramming.tistory.com/35
'Java > 알고리즘 공부' 카테고리의 다른 글
[백준 JAVA] 10952번: A + B - 5 / 10951번: A + B - 4 (0) | 2023.01.30 |
---|---|
[백준 JAVA] 2438번: 별 찍기 - 1 / 2439번: 별 찍기 - 2 (0) | 2023.01.30 |
[백준 JAVA] 10950번: A + B - 3 / 8393번: 합 / 25304번: 영수증 (0) | 2023.01.27 |
[백준 JAVA] 2884번: 알람시계 / 2525번: 오븐 시계 / 2480번: 주사위 세개 (0) | 2023.01.27 |
[백준 JAVA] 2588번: 곱셈 (3) | 2022.12.20 |