문제
세 자릿수 곱셈에서 (3), (4), (5), (6) 위치에 들어갈 값을 출력
입력
첫째 줄에는 (1)의 위치에 들어갈 세 자리 자연수, 둘째 줄에 (2)의 위치에 들어갈 세 자리 자연수가 주어진다.
출력
첫째 줄부터 넷째 줄 까지 차례대로 (3), (4), (5), (6)의 값을 출력
예제 입력
472
385
예제 출력
2360
3776
1416
181720
코드
1. 입력값을 문자열로 처리하는 경우
import java.util.*;
public class Main {
public static void main(String[] args) {
String num1, num2;
int sum, pos;
Scanner sc = new Scanner(System.in);
num1 = sc.nextLine();
num2 = sc.nextLine();
for (int i = 2 ; i >= 0 ; i--) {
sum = 0;
pos = 1;
for (int j = 2 ; j >= 0 ; j--) {
sum += Character.getNumericValue(num1.charAt(j)) * Character.getNumericValue(num2.charAt(i)) * pos;
pos *= 10;
}
System.out.println(sum);
}
System.out.println(Integer.parseInt(num1) * Integer.parseInt(num2));
sc.close();
}
}
처음에는 배열을 쓰지 않으면서 각 자리를 사용해야 하므로 문자열로 처리하는 게 좋다고 생각했다.
이중 ``for``문에서 한 단계씩 계산하는 과정은 우리가 일반적으로 수학식을 계산하는 과정과 동일하다.
계산과정
- 숫자 2개를 문자열로 받은 다음 ``charAt``으로 한 자리씩 추출한다.
- ``getNumericValue()``로 각 위치의 자리를 숫자 변환한 뒤 서로 계산한다.
- 2의 결과값에 가중치(pos)를 곱해서 더한다.
``pos``는 10진수의 가중치 값을 곱해주는 변수이다(1의 자리, 10의 자리, 100의 자리수이므로)
2. 입력값을 숫자로 처리하는 경우
import java.util.*;
public class Main {
public static void main(String[] args) {
int num1, num2, sum;
Scanner sc = new Scanner(System.in);
num1 = sc.nextInt();
num2 = sc.nextInt();
System.out.println(num1 * (num2 % 10));
System.out.println(num1 * ((num2 / 10) % 10));
System.out.println(num1 * (num2 / 100));
System.out.println(num1 * num2);
sc.close();
}
}
위의 코드도 문자열로 바꿀 수는 있지만 로직의 차이가 있어서 정리했다.
예를 들어 ``472 * 5``인 경우 1번 코드는 ``((2 * 5) * 1) + ((7 * 5) * 10) + ((4 * 5) * 100) = 2360``이여서 ``for``문에서 3번 연산을 하는 반면에 2번 코드에서는 ``472 * 5 = 2360``으로 연산을 한 번에 끝내기 때문에 훨씬 효율적이다.
'기타 > 백준' 카테고리의 다른 글
[백준][Java, 1000] A + B (0) | 2021.09.14 |
---|