[Baekjoon 2588번] 곱셈 문제풀이
- Algorithm/Problem Solving
- 2021. 6. 21.
반응형
728x90
반응형
백준 2588번
1) 문제
2) 입력/출력 예제
제출 코드
import java.util.Scanner;
import java.util.stream.Stream;
public class M2588 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt(); // 472
int B = sc.nextInt(); // 385
/* 풀이 진행 */
// 1) 입력값 배열로 변경
int[] digitsA = Stream.of(String.valueOf(A).split(""))
.mapToInt(Integer::parseInt)
.toArray();
int[] digitsB = Stream.of(String.valueOf(B).split(""))
.mapToInt(Integer::parseInt)
.toArray();
// 2) 이중 for 문 실행
int multiplyResult = 0;
for (int i = digitsB.length; i > 0; i--) { // length : 3, 2, 1,,,
int multiply = 0;
for (int j = digitsA.length; j > 0; j--) {
int n = digitsA.length - j; // 0, 1, 2,,,
if (n == 0) {
multiply += digitsB[i - 1] * digitsA[j - 1];
} else {
multiply += digitsB[i - 1] * digitsA[j - 1] * (Math.pow(10, n));
}
}
System.out.println(multiply);
int n2 = digitsB.length - i; // 0, 1, 2,,,
if (n2 == 0) {
multiplyResult = multiply;
} else {
multiplyResult += multiply * (Math.pow(10, n2));
}
}
System.out.println(multiplyResult);
}
}
설명
1) 입력된 숫자를 숫자형 배열로 변환
int[] digitsA = Stream.of(String.valueOf(A).split(""))
.mapToInt(Integer::parseInt)
.toArray();
2) 변수 설명
472 : digitsA
385 : digitsB
multiplyResult : 총 합을 출력할 값 (=181720)
multiply : 각 순서대로 출력할 값 (=2360, 3776, 1416)
2) 각 배열의 마지막 원소부터 시작하여 곱한다.
[1]
multiply += digitsB[i - 1] * digitsA[j - 1];
-> digitsB[i - 1] = 5
-> digitsA[j - 1] = 2
= 10
multiply += digitsB[i - 1] * digitsA[j - 1] * (Math.pow(10, n));
-> digitsB[i - 1] = 5
-> digitsA[j - 1] = 7
= 35 * 10 = 350
= 350 + 10 = 360
multiply += digitsB[i - 1] * digitsA[j - 1] * (Math.pow(10, n));
-> digitsB[i - 1] = 5
-> digitsA[j - 1] = 4
= 20 * 100 = 2000
= 2000 + 360 = 2360
출력할 multiply = 2360
[2] 위 방식으로 계속 row를 출력한 후, 모든 row도 동일한 방식으로 구현
int n2 = digitsB.length - i; // 0, 1, 2,,,
digitsB.length - i 로 n2 값을 구한다.
multiplyResult = multiply;
= 2360
multiplyResult += multiply * (Math.pow(10, n2));
= 3776 * 10
multiplyResult += multiply * (Math.pow(10, n2));
= 1416 * 100
총 결과 : 2360 + 37760 + 141600 = 181720
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
[Baekjoon 2750번] 선택정렬, 삽입정렬 풀이 (0) | 2021.07.05 |
---|---|
[Baekjoon 2884번] if문-알람 시계 문제풀이 (0) | 2021.06.27 |
[코딩인터뷰] 스택 - 유효한 괄호 문제풀이 (0) | 2021.02.08 |
[코딩인터뷰] 연결리스트 - 역순 연결리스트 문제풀이 (0) | 2021.02.07 |
[코딩인터뷰] 연결리스트 - 두 정렬 리스트의 병합 문제풀이 (0) | 2021.02.07 |