본문 바로가기
알고리즘 풀이

[백준]11021번: A+B -7 - java 풀이

by 코디드 2023. 3. 30.

 

StringBuilder나 BufferedWriter로 풀면 정말 간단한 문제인데

 

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());
		
		StringBuilder sb = new StringBuilder();
		
		for(int i=1; i<T+1; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int A = Integer.parseInt(st.nextToken());
			int B = Integer.parseInt(st.nextToken());
			
			sb.append("Case #"+i+": "+(A+B)+"\n");
		}
      		br.close();
        
		System.out.println(sb);	
	}
}

 

 

 

 

 

 

System.out.prinf(); 연습을 위해 일부러 풀어봤다.

 

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());
		
		for(int i=1; i<T+1; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int A = Integer.parseInt(st.nextToken());
			int B = Integer.parseInt(st.nextToken());
			
			System.out.printf("%s #%d: %d", "Case", i, A+B);
			System.out.println();
		}
    	 	br.close();
	}
}

 

System.out.printf(); 의 경우 원하는 데이터 형식으로 출력하려고 할때 편리하게 사용할 수 있다.

System.out.printf("형식", 사용 할 데이터); 형식으로 쓰는데 이 경우, 문자열 형식인 %s, 10진수 형태인 %d가 사용되었다.

 

 

System.out.printf("%s #%d: %d", "Case", i, A+B);

 

이렇게 작성한 경우 아래와 같이 출력된다.

 

 

Case #1: 2
Case #2: 5
Case #3: 7
Case #4: 17
Case #5: 7

 

사실 위에서 얘기한 것처럼 BufferedWriter와 StringBuilder를 사용하면 똑같은 결과를 도출할 수 있지만, System.out.printf(); 도 사용할줄 알면 좋기 때문에 연습해보면 좋을 것 같다.

 

 

 

 

 

 

charAt() 을 이용한 풀이)

 

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 T = Integer.parseInt(br.readLine());
		
		for(int i=1; i<T+1; i++) {
			String str = br.readLine();
			int A = str.charAt(0)-'0';
			int B = str.charAt(2)-'0';
			
			System.out.println("Case #"+i+": "+(A+B));
		}
	}
}

 

A와 B가 한 자릿수 정수이기 때문에 A, 그 사이 공백, B의 자리가 고정적이다

배열로 치면 index 0의 위치에 A, 1의 위치에 공백, 2의 위치에 B가 존재한다.

String.charAt()은 문자열의 특정 위치의 문자를 반환해주기 때문에 이를 사용할 경우, 따로 StringTokenizer나 String.split()을 사용하지 않아도 된다.

 

for(int i=1; i<T+1; i++) {
			String str = br.readLine();
			int A = str.charAt(0)-'0';
			int B = str.charAt(2)-'0';
			
			System.out.println("Case #"+i+": "+(A+B));
		}
	}

 

 

그리고 A와 B는 하나의 문자열(한 줄)에 있는 문자이기 때문에 String str로 변수를 만들어서 써줘야 한다.

 

 

int A = br.readLine().charAt(0);
int B = br.readLine().charAt(2);

 

처음에 풀때 그점을 망각하고 이렇게 풀었는데

이 경우, 각각 다른 줄에 있는 A와 B를 입력 받는다는 얘기가 되기 때문에 오류가 발생한다.