백준 2739
구구단
구구단 반복문이니까 for문으로 했다!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int gogodan = sc.nextInt();
for(int i=1; i<10; i++) {
System.out.println(gogodan + " * " + i + " = " + gogodan*i);
}
}
}
백준 10950
A+B - 3
주의할 점
첫 줄에 테스트 케이스 수가 주어진다.
while문일 때
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt(); //테스트 케이스 개수
int i = 0;
while(i < T) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a+b);
i++;
}
}
}
for문일 때
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt(); //테스트 케이스 개수
for(int i=1; i<=T; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a+b);
}
}
}
* int i=0 ; 하면 런타임 에러가 뜬다
[다른 코드 참고]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt(); //테스트 케이스 개수
int arr[] = new int[T];
for(int i=1; i<=T; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
arr[i] = a + b; // i번째 배열에 저장
}
sc.close();
for(int k : arr) {
System.out.println(k);
}
}
}
[BufferedReader 사용]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
StringTokenizer st ;
for(int i=0; i<t; i++) {
st = new StringTokenizer(br.readLine()," ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(a+b);
}
}
}
[BufferedReader + StringBuilder 사용 ]
StringTokenizer 는 한줄에 두 정수를 써야하는데 문자열을 공백의 기준으로 분리해준다
StringBuilder String을 합치는 작업이다. append()의 인자로 연결하고자 하는 문자열을 넣어서 한번에 출력
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); //테스트 케이스 수
StringTokenizer st; // 문자열 분리
StringBuilder sb = new StringBuilder();
for(int i=0; i<T; i++) {
st = new StringTokenizer(br.readLine(), " "); //공백의 기준으로 문자열 분리
sb.append(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()));
sb.append('\n');
}
System.out.println(sb);
}
}
Scanner 보다 BufferedReader 쓰면 성능적으로 훨씬 좋다
맨 위 BufferedReader
두번째 Scanner 사용 while문
세번째 Scanner 사용 for문
백준 8393
합
BufferedReader 사용 for문으로 했을 때
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
br.close();
int sum = 0;
for(int i=1; i<=n; i++) {
sum+=i;
}
System.out.println(sum);
}
}
위 코드에서 약간 더 간단한 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
int sum = 0;
for(int i=1; i<=n; i++) {
sum+=i;
}
System.out.println(sum);
}
}
백준 25304
영수증
[Scanner 사용했을 때]
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int totalPrice = sc.nextInt();
int totalNum = sc.nextInt();
int arr[] = new int[totalNum];
int sum = 0;
for(int i=0; i<totalNum; i++) {
int price = sc.nextInt();
int num = sc.nextInt();
arr[i] = price * num;
sum+=arr[i];
}
sc.close();
if(totalPrice == sum) System.out.println("Yes");
else System.out.println("No");
}
}
[BufferedReader 사용했을 때]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int totalPrice = Integer.parseInt(br.readLine());
int totalNum = Integer.parseInt(br.readLine());
int arr[] = new int[totalNum];
int sum = 0;
for(int i=0; i<totalNum; i++) {
st = new StringTokenizer(br.readLine(), " ");
int price = Integer.parseInt(st.nextToken());
int num = Integer.parseInt(st.nextToken());
arr[i] = price * num;
sum += arr[i];
}
if(totalPrice == sum) System.out.println("Yes");
else System.out.println("No");
}
}
성능이 scanner 사용할때보다 반이상 좋아진다.
백준 15552
빠른 A+B
Scanner 와 System.out.println() 를 사용하면 한버에 데이터를 한개씩 입출력해서 시간초과가 되기 때문에 BufferedReader 사용하기!
총 두가지 방법이 있다
1. BufferedReader + BufferedWriter
2. BufferedReader + StringBuilder
1. [BufferedReader + BufferedWriter 사용한 정답]
BufferedWriter 는 버퍼에 담아둬았다가 한 번에 데이터를 보내는 방법
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 T = Integer.parseInt(br.readLine());
StringTokenizer st; //문자열 분리
for(int i=0; i<T; i++) {
st = new StringTokenizer(br.readLine()," "); // 공백을 기준으로 문자열 분리
bw.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())) + "\n");
}
br.close();
bw.flush(); //버퍼 비우기
bw.close();
}
}
테이스 케이스가 두 정수여서 StringTokenizer 을 생성하여 문자열을 분리해준다.
▶ st = new StringTokenizer(br.readLine()," ");
다음 열에서는 위에서 반환되는 문자열을 다시 숫자로 바꿔준다.
그리고 두 토큰을 합해준다
▶ ( bw.write((Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken()))+ "\n"); )
※ 두 정수 입력후 줄바꿈 "\n" ( 쌍따옴표 주의 )
( Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) )
두 토큰을 한번에 묶고 줄 바꿈을 하면 시간이 줄어듬
마지막으로 꼭 버퍼를 비우고(flush) 닫아준다(close)
2. [BufferedReader + StringBuilder 사용한 정답]
조금 더 간단하고 이 방법이 약간 더 빠르다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
StringTokenizer st;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine()," ");
sb.append(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())).append("\n");
}
br.close();
System.out.println(sb);
}
}
백준 11021
A+B - 7
StringBuilder , BufferedWriter 두가지 방법으로 해보자
[StringBuilder 사용하기]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); //테스트 케이스 개수
// 두 정수 문자열 분리
StringTokenizer st;
StringBuilder sb = new StringBuilder();
for(int i=1; i<=T; i++) {
st = new StringTokenizer(br.readLine()," "); // 입력한 두 정수 분리
sb.append("Case #").append(i).append(": ").append(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())).append("\n");
}
br.close();
System.out.println(sb);
}
}
sb.append().append().append() 로 쭉 이어서 한꺼번에 출력하기
혹은 sb.append() 안에 한꺼번에 넣어줘도 된다
▶ sb.append("Case #"+ i + ": " + (Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())) + "\n" );
[BufferedWriter 사용하기]
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 T = Integer.parseInt(br.readLine()); //테스트 케이스 개수
// 두 정수 문자열 분리
StringTokenizer st;
for(int i=1; i<=T; 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();
}
}
백준 11022
A+B - 8
위 문제와 비슷하다
이것 역시 StringBuilder , BufferedWriter 두가지 방법으로 해보자
[BufferedWriter 사용하기]
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 T = Integer.parseInt(br.readLine()); //테스트 케이스 개수
// 두 정수 문자열 분리
StringTokenizer st;
for(int i=1; i<=T; 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");
}
br.close();
bw.flush();
bw.close();
}
}
한꺼번에 적었더니 런타임 에러 나왔다
bw.write("Case #" + i + ": "
+ Integer.parseInt(st.nextToken()) + " + " + Integer.parseInt(st.nextToken())
+ " = " + (Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())) + "\n");
[StringBuilder 사용하기]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); //테스트 케이스 개수
// 두 정수 문자열 분리
StringTokenizer st;
StringBuilder sb = new StringBuilder();
for(int i=1; i<=T; i++) {
st = new StringTokenizer(br.readLine()," "); // 입력한 두 정수 분리
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
sb.append("Case #"+ i +": "+ A +" + "+ B + " = " + (A+B)).append("\n");
}
br.close();
System.out.println(sb);
}
}
자꾸 깜빡하는거 줄 바꿈!!
.append("\n");
'공부' 카테고리의 다른 글
[백준] 4단계 | 10807, 10871, 10818, 2562, 5597, 3052, 1546 (0) | 2023.03.04 |
---|---|
[백준] 3단계 | 반복문 8~12 (0) | 2023.02.17 |
[백준] 2단계 | 조건문 1~7 (2) | 2023.01.28 |
[백준] 1단계 | 입출력과 사칙연산 10~14 (0) | 2023.01.26 |
입력방법 BufferedReader (0) | 2023.01.20 |