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
'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 |
댓글