백준 10952번 - Java
https://www.acmicpc.net/problem/10952
알고리즘
한 줄에 2개의 입력이 들어온다.
2개의 입력이 0이 아니면
2개의 정수를 더하여 출력한다.
2개의 입력이 0이면 끝난다.
1. 0보다 크고 10보다 작은 정수 A와 B를 입력받는다.
2. A와 B가 0이 아닐 때
2-1. (A+B)를 한 줄 출력한다.
3. 0이 맞다면 종료
풀이1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class No_10952 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
while(true) {
st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
if (A==0 && B==0) break;
sb.append(A+B).append('\n');
}
System.out.println(sb);
}
}
기본적인 입출력인 Scanner -> BufferedReader , print -> StringBuilder 로 쓴 것이다.
위 알고리즘대로 풀어서 썼을 때
1. while 문으로 계속 입력을 받는다.
2. A 와 B 를 입력 받는다.
3. if문으로 A 와 B 가 0인지 확인하여 0이면 break로 while 문 중단하고 끝낸다.
4. 0이 아니라면 StringBuilder에 (A+B)를 추가하고, 곧 바로 '\n'을 넣는데 이것은 Enter라고 보면 된다.
5. 모든 작업이 끝나면 StringBuilder를 출력하고 문제 종료
풀이2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class No_10952 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while (true) {
String str = br.readLine();
int A = str.charAt(0) - 48;
int B = str.charAt(2) - 48;
if (A == 0 && B == 0) break;
sb.append(A + B).append('\n');
}
System.out.println(sb);
}
}
풀이1 방법밖에 생각이 나지않아 다른 풀이법들을 참고하였는데 색다른 방법이라 적어놓는다.
풀이1과 다른점은 A와 B를 입력하는 방식이다.
풀이2는 입력받는 값이 한 자리의 숫자이고, 위치가 고정적이라는 점을 생각하여 StringTokenizer를 쓰지 않는다.
일단 한 줄의 문자열을 받은 후 거기서 0번째 문자를 int A에 넣을 것인데 이 상태는 인코딩한 값 상태여서 - 48이나 - '0'을 해주어야 한다. 48과 '0' 은 똑같은 의미이다. 왜 이러한 방식을 하는지 모르겠다면 스트림, char(문자)와 String(문자열)을 공부하여야 한다.
일단 str이라는 문자열에서 1개의 char(문자)를 가져오는데 사용자마다 IDE 환경이 달라서 거기서 설정되어 있는 인코딩 형식의 10진수 값이 나온다고 보면 된다. 그런데 이 다양한 인코딩 형식들 대부분은 1 ~ 127번 문자까지는 아스키 코드값과 같아서 대부분의 사용자가 모르는 경우가 많다.
그래서 아스키코드에서 우리가 아는 숫자 0의 값은 48이기에 현재 저 문자에서 - 48 또는 - '0' 을 한것이다. 그렇게 했을 시 우리가 원하는 숫자가 나오게 된다.
'코딩테스트 > Java - 백준' 카테고리의 다른 글
[백준] 2577번 - Java(자바) (0) | 2022.01.23 |
---|---|
[백준] 2562번 - Java(자바) (0) | 2022.01.18 |
[백준] 10818번 - Java(자바) (0) | 2022.01.14 |
[백준] 1110번 - Java(자바) (0) | 2022.01.11 |
[백준] 2439번 - Java(자바) (0) | 2022.01.04 |