본문 바로가기
ONLINE JUDGE/제어문

[백준11021/11022] A+B-7/A+B-8

by W_W_Woody 2022. 2. 2.

https://www.acmicpc.net/problem/11021

 

11021번: A+B - 7

각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.

www.acmicpc.net


방법1. StringBuilder 이용하기

package step3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Day10_11021 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
StringTokenizer st;
for(int i=0;i<N;i++) {
st = new StringTokenizer(br.readLine());
sb.append("Case #").append(i+1).append(": ")
.append(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())).append("\n");
}
br.close();
System.out.println(sb);
}
}

.append 를 저렇게 나눠서 쓰는게 아닌 한 번에 써주어도된다.

sb.append("Case #"+ i + ": " + (Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())) + "\n" );

이렇게 출력할 문자에 여러 타입이 섞여있으면 해당 메소드는 일일이 타입검사를 해주어야 하기 때문에 시간이 미약하게나마 더 걸리게 된다.

 

방법2. BufferedWriter 이용하기

package step3;
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 Day10_11021_2 {
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=0;i<N;i++) {
st = new StringTokenizer(br.readLine());
bw.write("Case #"+(i+1)+": ");
bw.write(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())+"\n");
}
br.close();
bw.flush();
bw.close();
}
}

BufferedWriter.write() 메소드는 단독으로 int 형 값만 넣을경우 이는 아스키 코드값으로 인식되기 때문에 다른 문자가 나와버린다. 그러니 이를 방지하고 싶다면 반드시 문자열과 int 형을 함께 넣어줘야 int 값을 제대로 출력할 수 있다.

 reader/writer 는 문자열을 다루는 클래스인데 정수값만 넣게되면 ascii타입으로 인코딩을 한다.

문자열과 int 형을 함께 넣어줘야 int 값을 제대로 출력할 수 있다.

 


https://www.acmicpc.net/problem/11022

 

11022번: A+B - 8

각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

www.acmicpc.net


방법3. String.charAt() 이용하기

package step3;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Day10_11022_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= N; i++) {
String str = br.readLine();
int A = str.charAt(0)-'0';
int B = str.charAt(2)-'0';
sb.append("Case #").append(i).append(": ").append(A)
.append(" + ").append(B).append(" = ").append(A+B).append('\n');
}
br.close();
System.out.println(sb);
}
}

String.charAt() 은 해당 위치의 문자를 char 로 반환한다.

즉 만약 0이라는 문자열이 반환되면 아스키 코드값인 48이 반환된다.

이를 int형으로 연산하려고 하거나 문자 출력이 아닌 정수로 출력하려 하면 0 이라는 숫자가 아닌 48로 출력된다.

 

그러니 예로들어 문자 '6' 을 숫자 6 으로 바꾸고 싶다면 48을 빼주면 된다.

만약 몇을 빼줘야할지 모른다면 -'0' 으로 해도 된다.

 

외우고 있으면 활용할 때 편한 4가지 아스키 코드

Enter = 13,    숫자 0 = 48,     대문자 A = 65 ,    소문자 a = 97

 

-숫자0~9까지 아스키코드값은

    48~57

-영문a~z까지의 아스키코드값은

대문자 65~90

소문자 97~122

 

 

[Java] 💻String의 생성자와 메서드

'ONLINE JUDGE > 제어문' 카테고리의 다른 글

[백준10871] X보다 작은 수  (0) 2022.02.02
[백준15552] 빠른A+B  (0) 2022.02.02
[백준2438] 별 찍기 -1  (0) 2022.01.28
[백준2741/2742] N찍기/기찍N  (0) 2022.01.27
[백준8393] 합  (0) 2022.01.27

댓글