백준 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");

 

 

 

반응형
LIST

+ Recent posts