반응형
원래는 숫자를 하나씩 뽑아서 계산하는 방식으로 하려고 했는데 그러려면 문자열로 받아서 해야한다고 한다. 우선 나는 계산 방식으로 풀고 숫자를 하나씩 뽑아서 계산하는 방식을 풀게 되면 추가로 올리려고 한다.
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a, b;
a = sc.nextInt();
b = sc.nextInt();
while(a > 999 || b > 999){
System.out.println("a, b는 3자리 이하여야합니다.");
a = sc.nextInt();
b = sc.nextInt();
}
System.out.println(a*(b%10));
System.out.println(a*(b%100/10));
System.out.println(a*(b/100));
System.out.println(a*b);
sc.close();
}
}
BufferedReader가 Scanner에 비해 처리속도가 빠르다고 하는데 문자열로 받아서 풀어야한다면 그 방식을 이용해서 풀어봐야겠다.
+ BufferedReader를 사용해서 푸는 방법
밑줄에 마우스를 가져다대니 BufferedReader를 사용할 때에는 IOException을 던져야된다고 되어있다.
이렇게 풀었더니 결과가 이상하게 나왔다. 이유를 찾아보니, 문자열을 뽑은 것이기 때문에 아스키코드로 되어있어서
제대로 쓰려면 b.charAt(2)에 문자 0의 값을 빼줘야되는 거였다.
(b.charAt(2) - '0') 이나 (b.charAt(2) - 48) 을 해주면 된다.
문자 | 10진수 | 16진수 |
0 | 48 | 0x30 |
1 | 49 | 0x31 |
2 | 50 | 0x32 |
3 | 51 | 0x33 |
4 | 52 | 0x34 |
5 | 53 | 0x35 |
6 | 54 | 0x36 |
7 | 55 | 0x37 |
8 | 56 | 0x38 |
9 | 57 | 0x39 |
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));
String a = br.readLine();
String b = br.readLine();
System.out.println(Integer.parseInt(a) * (b.charAt(2) - 48));
System.out.println(Integer.parseInt(a) * (b.charAt(1) - 48));
System.out.println(Integer.parseInt(a) * (b.charAt(0) - 48));
System.out.println(Integer.parseInt(a) * Integer.parseInt(b));
}
}
위가 BufferedReader를 사용한 것이고, 아래가 Scanner를 사용한 것인데 확실히 BufferedReader가 빠르긴 하다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 10171 - 고양이 (0) | 2024.01.21 |
---|---|
[백준] 11382 - 꼬마 정민 (0) | 2024.01.20 |
[백준] 10430 - 나머지 (0) | 2024.01.18 |
[백준] 18108 - 1998년생인 내가 태국에서는 2541년생?! (0) | 2024.01.17 |
[백준] 10926 - ??! (0) | 2024.01.16 |