Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- deepcopy
- java
- 전달 보증 수준
- v-if
- mapstruct
- CKAN for mac
- polynote
- Rust
- typescript
- CKAN docker
- Apache Kafka
- StringBuffer
- docker image clean
- 난수
- CKAN
- vuejs
- model mapper
- Docker
- webnotebook
- StringBuilder
- bigdata
- v-show
- spring
- mysql
Archives
- Today
- Total
국쥐의 개발 일상
백준(BOJ) 1225번 자바 풀이 본문
문제
이상한 곱셈
설명
A*B를 계산하다 지겨워진 형택이는 A*B를 새로운 방법으로 정의하려고 한다.
A에서 한 자리를 뽑고 * B에서 임의로 한 자리를 뽑아 곱한다.
의 가능한 모든 조합 (A가 n자리, B가 m자리 수라면 총 가능한 조합은 n*m개)을 더한 수로 정의하려고 한다.
예를 들어 121*34는
1*3 + 1*4 + 2*3 + 2*4 + 1*3 + 1*4 = 28
이 된다. 이러한 형택이의 곱셈 결과를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. 주어지는 두 수는 모두 10,000자리를 넘지 않는다.
출력
첫째 줄에 형택이의 곱셈 결과를 출력한다.
풀이과정
A의 자릿수를 순회하면서 B의 자릿수를 계속 곱해서 더하면 간단히 풀릴 문제이다. (단 32bit 정수의 범위를 넘어 갈 수 있으므로 64bit 정수 자료형을 사용하여야 한다!) 하지만 필자는 조금 다른 방식으로 풀어보았다. A의 자릿수와 B의 자릿수를 곱해서 더하는거기 때문에 굳이 2중으로 루프를 돌지 않아도 A와 B의 자릿수를 각각 더한 후 더한 결과를 서로 곱해주면 된다!
예) 121 * 34 = (1 + 2 + 1) * (3 + 4) = 28
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try (Scanner sc = new Scanner(System.in)) {
String A = sc.next();
String B = sc.next();
char[] aChars = A.toCharArray();
char[] bChars = B.toCharArray();
long digitSum1 = 0;
long digitSum2 = 0;
for (char c : aChars) {
digitSum1 += Character.getNumericValue(c);
}
for (char c : bChars) {
digitSum2 += Character.getNumericValue(c);
}
System.out.println(digitSum1 * digitSum2);
}
}
}