[BaekJoon] 10951๋ฒˆ - A+B - 4 (java)

1. ๋ฌธ์ œ

๐Ÿ‘‰ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

- ์กฐ๊ฑด

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ
1์ดˆ 256MB


- ๋ฌธ์ œ

๋‘ ์ •์ˆ˜ A์™€ B๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋‹ค์Œ, A+B๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.



- ์ž…๋ ฅ

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ์ค„์— A์™€ B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 < A, B < 10)



- ์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค A+B๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

- ์˜ˆ์ œ

ย ย ์ž…๋ ฅย ย  ย ย  ์ถœ๋ ฅย ย 
1 1
2 3
3 4
9 8
5 2
2
5
7
17
7





2. ํ’€์ด

๋ฐ˜๋ณต๋ฌธ while๋ฅผ ์‚ฌ์šฉํ•ด ์ฒซ ์ค„์— ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’๋งŒํผ A + B๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

while (์กฐ๊ฑด์‹) {
    ์กฐ๊ฑด์‹์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ธ ๋™์•ˆ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ช…๋ น๋ฌธ ์ž‘์„ฑ;
}



์ด ๋ฌธ์ œ์˜ ํฌ์ธํŠธ๋Š” ์ข…๋ฃŒ ์กฐ๊ฑด ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค.
์ฆ‰ ๋”์ด์ƒ ์ฝ์–ด์˜ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ(* EOF), ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.

* EOF ๋ž€?
End Of File ์˜ ์•ฝ์ž๋กœ, ๋ฐ์ดํ„ฐ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ๋”์ด์ƒ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์šฉ์–ด์ด๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ž…๋ ฅ๊ฐ’์˜ ์ข…๋ฃŒ ์กฐ๊ฑด์ด ์—†์„ ๊ฒฝ์šฐ, EOF ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.




2๊ฐœ์˜ ์ž…๋ ฅ๋ฐฉ์‹๊ณผ 2๊ฐœ์˜ ์ถœ๋ ฅ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

  1. Scanner ํด๋ž˜์Šค (์ž…๋ ฅ)
  2. BufferedReader ํด๋ž˜์Šค (์ž…๋ ฅ)
    ย ย โ‘  StringBuilder (์ถœ๋ ฅ)
    ย ย โ‘ก BufferedWriter (์ถœ๋ ฅ)




- 1. Scanner ํด๋ž˜์Šค

Scanner ์˜ ๊ฒฝ์šฐ ๋”์ด์ƒ ์ฝ์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด NoSuchElementException ์„ ๋˜์ง€๊ฒŒ ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ IDE๋‚˜ ํ„ฐ๋ฏธ๋„์—์„œ System.in(ํ‚ค๋ณด๋“œ)์œผ๋กœ ์ž…๋ ฅ๋ฐ›์„ ๊ฒฝ์šฐ, Scanner ๋Š” Enter, Space๋ฅผ ์ž…๋ ฅํ•ด๋„ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

๋”ฐ๋ผ์„œ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒ์‹œํ‚ค๋ ค๋ฉด Enter, Space๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๊ฒฝ์šฐ ์กฐ๊ฑด๋ฌธ์„ ๊ฑธ์–ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์•ผํ•œ๋‹ค.
๋˜๋Š”, ctrl + Z(์œˆ๋„์šฐ) / ctrl + D(๋ฆฌ๋ˆ…์Šค๊ณ„์—ด) ์„ ์ž…๋ ฅํ•ด์ฃผ๊ฑฐ๋‚˜ ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜๋Š” ๋“ฑ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์ž…๋ ฅ์„ ์ฃผ์–ด InputMismatchException ์„ ๋ฐœ์ƒ์‹œ์ผœ์•ผ ํ•œ๋‹ค.

๋ฐฑ์ค€์—์„œ๋Š” ๋”์ด์ƒ ์ฝ์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š”๊ฒฝ์šฐ ๋‹น์—ฐํžˆ nextInt() ์—์„œ ๋ฐ›๋Š” ์ž…๋ ฅ์ด ์กด์žฌํ•˜์ง€ ์•Š์•„ ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ์ค€๋‹ค. ๊ทธ๋ž˜์„œ ๋”ฐ๋กœ Enter, Space์— ๋Œ€ํ•ด ์กฐ๊ฑด์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ๋‹ค.


์˜ˆ์™ธ ์ฒ˜๋ฆฌ์—๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  • try ~ catch ๋ฌธ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
  • Scanner์˜ ๋ฉ”์„œ๋“œ์ธ hasNext() ๋˜๋Š” hasNextInt() ๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ์ฒ˜๋ฆฌ

์ด ๋ฌธ์ œ์—์„  hasNextInt() ๋ฅผ ์‚ฌ์šฉํ•ด ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋ณด์ž.




import java.util.Scanner;
 
public class Main {
	public static void main(String args[]){
		
		Scanner sc = new Scanner(System.in);
			
		while(sc.hasNextInt()){
		
			int a = sc.nextInt();
			int b = sc.nextInt();
			System.out.println(a+b);
		
		}	
		sc.close();
	}
}

์œ„์™€๊ฐ™์ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, Scanner(System.in) ์—์„œ System.in ์€ ์ž…๋ ฅํ•œ ๊ฐ’์„ Byte ๋‹จ์œ„๋กœ ์ฝ๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค while ๋ฌธ์—์„œ hasNextInt() ๋กœ ์ž…๋ ฅ๊ฐ’์„ ํ™•์ธํ•œ ํ›„, nextInt()๋กœ ์ •์ˆ˜ ๊ฐ’์„ ์ฝ์–ด๋“ค์ธ๋‹ค.

hasNextInt() ๋Š” ์ž…๋ ฅ๊ฐ’์ด ์ •์ˆ˜์ผ ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด์„œ ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋œ๋‹ค.



[์—ฌ๊ธฐ์„œ ์ž ๊น!]

Scanner์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”




- 2. BufferedReader ํด๋ž˜์Šค ์‚ฌ์šฉ

BufferedReader ์˜ ๊ฒฝ์šฐ null ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
IDE๋‚˜ ํ„ฐ๋ฏธ๋„์—์„œ BufferedReader๋กœ null์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋„ ctrl + Z (์œˆ๋„์šฐ) ๋˜๋Š” ctrl + D(๋ฆฌ๋ˆ…์Šค)๋ฅผ ์ž…๋ ฅํ•ด์•ผํ•œ๋‹ค.


BufferedReader ์˜ readLine()์€ ํ•œ ์ค„์„ ํ†ต์งธ๋กœ ์ฝ์–ด String์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— " "(๊ณต๋ฐฑ)์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„ํ•ด์•ผํ•œ๋‹ค.

๋ฌธ์ž์—ด ๋ถ„๋ฆฌ ๋ฐฉ๋ฒ•์—๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • StringTokenizer ํด๋ž˜์Šค
  • String ํด๋ž˜์Šค์˜ split() ๋ฉ”์†Œ๋“œ

์ด ๋ฌธ์ œ์—์„œ๋Š” StringTokenizer ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

split() ๋ฉ”์„œ๋“œ๋Š” ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ๋ฉด์—์„œ ๋น„๊ต์  ๋Š๋ฆฌ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ StringTokenizer ํด๋ž˜์Šค๋Š” ๊ตฌ๋ถ„์ž๋ฅผ ๋‹จ์ผ ๋ฌธ์ž๋กœ ์ฒ˜๋ฆฌํ•ด ๋ณต์žกํ•œ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋‹ค.



2๊ฐ€์ง€ ์ถœ๋ ฅ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๊ณ  ๋น„๊ตํ•ด๋ณด์ž.



ย ย ย ย  โ‘  StringBuilder
ย ย ย ย  โ‘ก BufferedWriter





โ‘  BufferedReader + StringBuilder

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main {
	public static void main(String args[]) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		String str;
 
		while((str = br.readLine()) != null){
		    
			st = new StringTokenizer(str," ");
            
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			
			sb.append(a+b).append("\n");
		}
		System.out.print(sb);
	}
}

readLine() ์„ ํ†ตํ•ด str ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ null ์ผ ๊ฒฝ์šฐ while ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒ์‹œํ‚ค๊ณ , ์•„๋‹๊ฒฝ์šฐ ๋ฐ˜๋ณต๋ฌธ์„ ๊ณ„์† ์ˆ˜ํ–‰ํ•œ๋‹ค.

readLine()์€ ํ•œ ์ค„์„ ํ†ต์งธ๋กœ ์ฝ์–ด String์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— StringTokenizer ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด โ€œ โ€œ(๊ณต๋ฐฑ)์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜๊ณ , nextToken()๋ฅผ ์‚ฌ์šฉํ•ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ์ž…๋ ฅ๊ฐ’๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

Integer.parseInt()์„ ์‚ฌ์šฉํ•ด Stringํ˜•์„ intํ˜•์œผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ค€๋‹ค.

StringBuilder ํด๋ž˜์Šค๋Š” ๋ฌธ์ž์—ด์„ ๋™์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค๋กœ, append() ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.

append() ๋ฅผ ์œ„์™€ ๊ฐ™์ด ๋‚˜๋ˆ ์„œ ์“ฐ๋ฉด ํƒ€์ž… ๋ณ€ํ™˜๊ณผ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  StringBuilder์— ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‹ค ๋” ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅด๋‹ค.





โ‘ก BufferedReader + BufferedWriter

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.BufferedWriter;
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));
		StringTokenizer st;
		String str;

		while ((str = br.readLine()) != null) {
			st = new StringTokenizer(str, " ");

			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());

			bw.write(a + b + "\n");
		}
		br.close();
		bw.flush();
		bw.close();
	}
}

BufferedWriter ํด๋ž˜์Šค์˜ write() ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ถ€ ๋ฒ„ํผ์— ์ €์žฅํ•˜๊ณ , flush() ๋ฉ”์†Œ๋“œ ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฒ„ํผ๋ฅผ ๋น„์šฐ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

BufferedWriter ํด๋ž˜์Šค์˜ write() ๋ฉ”์†Œ๋“œ๋Š” ๋‹จ๋…์œผ๋กœ int ํ˜• ๊ฐ’๋งŒ ๋„ฃ์„ ๊ฒฝ์šฐ ์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ’์œผ๋กœ ์ธ์‹๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฌธ์ž๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋ฌธ์ž์—ด๊ณผ int ํ˜•์„ ํ•จ๊ป˜ ๋„ฃ์–ด์ค˜์•ผ int ๊ฐ’์„ ์ œ๋Œ€๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.



[์—ฌ๊ธฐ์„œ ์ž ๊น!]

BufferedWriter ํด๋ž˜์Šค์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๊ณ  ์‹ถ์œผ๋ฉด ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋œ๋‹ค.





3. ์„ฑ๋Šฅ ๋น„๊ต

image

์œ„์—์„œ ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ

BufferedReader + StringBuilder
BufferedReader + BufferedWriter
Scanner

์œ„์™€๊ฐ™์ด ์ž…๋ ฅ ๋ฉ”์†Œ๋“œ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์‹œ๊ฐ„์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ž…๋ ฅ์˜ ๊ฒฝ์šฐ ํ™•์‹คํžˆ Scanner ๋ณด๋‹ค๋Š” BufferedReader ๊ฐ€ ๋น ๋ฅธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ถœ๋ ฅ์˜ ๊ฒฝ์šฐ BufferedWriter ๋ณด๋‹ค๋Š” StringBuilder ๊ฐ€ ๋น ๋ฅธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
(๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ ์–‘์ด ์ปค์ง€๋ฉด ์ปค์งˆ ์ˆ˜๋ก BufferedWriter ๊ฐ€ ๋” ๋น ๋ฅด๋‹ค.)

BufferedWriter๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ I/O ์ž‘์—…์œผ๋กœ ์ธํ•ด ๋น„๊ต์  ๋Š๋ฆด ์ˆ˜ ์žˆ๋‹ค.
๋ฐ˜๋ฉด์— StringBuilder๋Š” ๋ฌธ์ž์—ด ์กฐ์ž‘์— ์ตœ์ ํ™”๋œ ํด๋ž˜์Šค๋กœ, ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.





๊ด€๋ จ ํŽ˜์ด์ง€

Categories:

Updated:

Leave a comment