1. 문제
https://www.acmicpc.net/problem/2588
(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.
(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때
(3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.
2. 정답
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int A = scan.nextInt();
String B = scan.next();
scan.close();
System.out.println(A * (B.charAt(2) - '0'));
System.out.println(A * (B.charAt(1) - '0'));
System.out.println(A * (B.charAt(0) - '0'));
System.out.println(A * Integer.parseInt(B));
}
}
3. 풀이
scanner와 charAt에 대해서 알고 있으면 쉽게 풀 수 있는 문제다.
scanner에 대한 글은 이 '링크' 글을 클릭하면 볼 수 있다.
아래 글은 scanner를 알고 있다는 가정하에 작성된 글이다.
Scanner scan = new Scanner(System.in);
int A = scan.nextInt();
String B = scan.next();
총 2개의 3자리 수를 입력받기 때문에 Scanner 클래스를 사용했다.
여기서 의아할 수 있는 부분은 첫 번째로 입력받는 수는 int A로 즉
int 형으로 저장하는 데 반해 아래에 String B를 보면
int형이 아닌 String으로 두 번째 숫자를 받아오는 걸 확인할 수 있다.
472X385를 한다고 했을 때 472는 int 형으로
385는 String으로 받아온 것이다.
두 숫자 모두 정수니까 두 개 모두 int형이면 될 텐데
왜 하나는 int로 다른 하나는 String으로 한 걸까?
이 문제에선 charAt를 사용해야 하기 때문이다.
3-1. charAt
1) charAt를 소개하는 이유
charAt는 string 타입을 char 타입으로 변환할 때 사용하는 함수다.
이 함수를 소개하는 이유는 프로그램에서 원하는 결과 값 때문이다.
만약 472 X 385를 계산한다고 했을 때 총 4개를 우리는 결과로 출력되도록 만들어어ㅑ 한다.
1번. 472 X 3 = 결과 1
2번. 472 X 8 = 결과 2
3번 472 X 5 = 결과 3
4번. 472X385 = 결과 4
여기서 결과 1번 ~ 결과 3번을 출력하기 위해선
385라는 덩어리를 3 / 8 / 5 이렇게 한 개씩 쪼개준 뒤
1번 ~ 3번처럼 곱해지는 연산을 해줘야 한다.
이렇게 쪼개주는 기능을 가지고 있는 게 바로 charAt 다.
2) charAt 사용 예시
String A = "부엉이요";
내가 위와같이 '부엉이요'라는 문자열을 작성했다고 했을 때
이 '부엉이요'를 한 개씩 쪼개고 싶다면 아래와 같이 작성하면 된다.
A.charAt(0); // 부
A.charAt(1); // 엉
A.charAt(2); // 이
A.charAt(3); // 요
출력 코드를 확인하고 싶다면 아래 '더보기'를 확인하면 될 것 같다.
public class Main {
public static void main(String[] args) {
String A = "부엉이요";
System.out.println(A.charAt(0)); //부
System.out.println(A.charAt(1)); //엉
System.out.println(A.charAt(2)); //이
System.out.println(A.charAt(3)); //요
}
}
이젠 이렇게 글자를 쪼개는 대신 숫자를 쪼개보자.
public class Main {
public static void main(String[] args) {
String B = "385"; //385 쪼개기
System.out.println(B.charAt(0)); // 문자 3
System.out.println(B.charAt(1)); // 문자 8
System.out.println(B.charAt(2)); // 문자 5
}
}
385라는 숫자를 한개씩 쪼개고자 위와같이 코드를 작성했다.
위와 같이 작성하면 사진처럼 문제없이
3 8 5 가 쪼개져서 나온다.
하지만 여기서 주의할 건 위의 3 8 5가 숫자가 아니라 문자라는 것이다.
3) 문자 3은 사실 짝퉁이다.
코드를 쓸 때 385가 한개씩 쪼개졌으면 해서
String B = "385";라고 작성했다.
int B = 385; 라고 작성하지 않았다.
그렇기에 위의 이미지에서 보이는 3은 사실 숫자 3이 아니다.
숫자 3의 탈을 쓴 숫자 51이다!
왜냐면 문자 3을 숫자로 바꾸면 숫자 51이 되기 때문이다.
제대로 된 숫자 3을 원한다면 해줘야 할 작업이 있다.
바로 문자 0을 빼주면 된다.
문자 0('0')은 숫자로 바꾸면 48이 된다.
문자 3에서 문자 0을 뺀다는 건
숫자 51에서 숫자 48을 뺀다는 말과 같다.
즉 51 - 48 = 3이다.
우리가 원하는 제대로 된 숫자 3이 나오는 것이다.
public class Main {
public static void main(String[] args) {
String B = "385"; //385 쪼개기
System.out.println(B.charAt(0) - '0'); // 숫자 3
System.out.println(B.charAt(1) - '0'); // 숫자 8
System.out.println(B.charAt(2) - '0'); // 숫자 5
}
}
위의 코드처럼 문자 0( - '0')을 빼주면 된다.
이렇게 문자 0을 빼주면 문자가 아닌 제대로 된 숫자가 나오는 것이다.
472 X 385를 계산한다고 했을 때
1번. 472 X 3
2번. 472 X 8
3번 472 X 5
4번. 472 x 385
총 4개의 값을 원했으니 최종적으로 아래처럼 코드를 작성하면 될 것이다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int A = scan.nextInt();
String B = scan.next();
scan.close();
System.out.println(A * (B.charAt(2) - '0'));
System.out.println(A * (B.charAt(1) - '0'));
System.out.println(A * (B.charAt(0) - '0'));
System.out.println(A * Integer.parseInt(B));
}
}
마지막에 Integer.parseInt가 보인다.
문자열을 정수(int)형으로 바꿔주는 것이다.
Integer.parseInt("3000");
이라고 써져있다면 문자 3000을 숫자 3000으로 바꿔주는 것이다.
숫자와 문자는 곱할 수 없고,
숫자와 숫자끼리 곱할 수 있기에
위와 같은 작업이 필요하다.
'IT > BaekJoon' 카테고리의 다른 글
[백준/JAVA] 9498 - 시험성적 (0) | 2023.01.14 |
---|---|
[백준/JAVA] 1330번 - 두 수 비교하기 (0) | 2023.01.08 |
[백준/JAVA] 3003번- 킹, 퀸, 룩, 비숍, 나이트, 폰 문제 (0) | 2023.01.01 |
[백준/JAVA] 10926번. ??! 문제 - Scanner 클래스와 Next 메소드 설명 (0) | 2022.11.20 |
[백준/JAVA] 1008번. A/B의 값은? (0) | 2022.11.12 |