반응형
1. 문제 추상화
정수 자료형으로 담을 수 없는 두 큰 정수의 합을 구하시오.
2. 알고리즘
long이나 int 같은 정수 자료형이 담을 수 없을 정도로 큰 수는 '문자열'을 이용하여 계산해야한다.
첫 번째 방법 : StringBuilder
1. 문자열로 두 수를 입력받는다.
2. StringBuilder의 reverse() 메소드를 활용하여, 문자열을 역순으로 정렬한다.
3. 자릿수가 적은 수는 적은만큼 0으로 채운다. EX) A : 4321 , B : 21 => A : 4321 , B : 2100
4. 문자열을 0부터 하나씩 추출하여 합한다.
5. 합이 10이상이면 올림한다.
두 번째 방법 : BigInteger
1. BigInteger 객체로 수를 받아 add() 메소드로 합연산을 한다.
3. 코드
첫 번째 방법 ( StringBuilder )
package boj10757;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb;
sb = new StringBuilder(sc.next());
String A = sb.reverse().toString(); // 문자열 역순 전환
sb = new StringBuilder(sc.next());
String B = sb.reverse().toString(); // 문자열 역순 전환
// 길이 맞추기
if(A.length() > B.length()) {
B = appendZero(B, A.length() - B.length()); // 적은 길이만큼 0으로 채우기
}else {
A = appendZero(A, B.length() - A.length()); // 적은 길이만큼 0으로 채우기
}
String result= "";
int carry = 0; // 올림
for(int i=0; i< A.length(); i++) {
int a = A.charAt(i) - '0';
int b = B.charAt(i) - '0';
int sum = a + b + carry;
if(sum >= 10) { // 합이 10보다 크면 올림은 1이다.
carry = 1;
}else {
carry = 0;
}
result += sum%10;
}
if(carry == 1) { // 마지막 수의 합이 10이상이면 1을 추가한다.
result += 1;
}
sb = new StringBuilder(result);
System.out.println(sb.reverse().toString());
}
public static String appendZero(String value, int count) {
for( int i = 0; i< count; i++) {
value += "0";
}
return value;
}
}
두 번째 방법 ( BigInteger )
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigInteger A = new BigInteger(sc.next());
BigInteger B = new BigInteger(sc.next());
System.out.println(A.add(B));
}
}
반응형
'문제풀이' 카테고리의 다른 글
[JAVA] 백준 1085번 직사각형에서 탈출 : 단서로 풀기 (0) | 2021.07.22 |
---|---|
[JAVA] 백준 1011번 Fly me to the Alpha Centauri : 부등식과 반복문 3 (0) | 2021.07.20 |
[JAVA] 백준 2839번 설탕 배달 : 함수 (0) | 2021.07.18 |
[JAVA] 백준 2775번 부녀회장이 될테야 : 이차원 배열 (0) | 2021.07.18 |
[JAVA] 백준 2869번 달팽이는 올라가고 싶다 (0) | 2021.07.16 |