elesis's haunt
10952 A+B - 5 본문
* BufferedReader, StringBuilder, StringTokenizer, 상수, 메소드체이닝, break;
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static final String LINNER = "\n";
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
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(LINNER);
}
System.out.println(sb);
}
}
비슷한 속도의 다른 로직
* BufferedReader, StringBuilder, CharAt, 메소드체이닝
- StringTokenizer 을 계속 생성해줄 필요 없으니 성능 측면에서 좀 더 이점
- 입력이 한 자리 수이니 공백의 위치는 고정이라는 점을 이용
import java.io.*;
public class Main {
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);
}
}
CharAt
- char는 단 한 글자만 저장할 수 있는 변수인데 Scanner로 입력을 받을 때는 String 타입으로 밖에 받을 수 없다. 그런 상황에서 사용하기위해 나왔다.
- charAt() 의 경우 문자(char)로 반환되기 때문에 반드시 -48 (또는 -'0') 을 해주어야 우리가 아는 정수의 형태가 나온다. char형 '1'은 int형으로 변환시 아스키코드 값 49로 변환된다. 여기서 int형 1이 필요하면 49에서 1이 되기 위해 48을 빼준다. '0'은 아스키코드 48 이므로 -48대신 -'0' 또한 가능하다.
숫자1이 49 여기에 '0'인 48을 빼주면 1
숫자2가 50 2
숫자3이 51 3
숫자4가 52 4
숫자5가 53 5
'백준~문풀 후 최적화 추가~ > 단계별로 풀어보기' 카테고리의 다른 글
1110 더하기 사이클 (0) | 2021.09.16 |
---|---|
10951 A+B - 4 (0) | 2021.09.14 |
10871 X보다 작은 수 (0) | 2021.09.13 |
2439 별 찍기 - 2 (0) | 2021.09.13 |
2438 별 찍기 - 1 (0) | 2021.09.13 |