큰 수 A+B
첫줄에 입력된 두 숫자를 더하는 문제이다.
'큰 수'이기 때문에 +연산자로 간단하게 더할 수 있는 문제는 아니다.
과거에 학교 수업에서 해본 경험이 있기 때문에 기억을 살려서 풀었다. (이게 왜 난이도가 브론즈 5지...)
풀이 전략은 이러하다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
String[] big_str = N.split(" ");
StringBuffer sb_1 = new StringBuffer(big_str[0]);
StringBuffer sb_2 = new StringBuffer(big_str[1]);
String fst_num = sb_1.reverse().toString();
String sec_num = sb_2.reverse().toString();
// 문자열을 받아서 거꾸로 저장(일의 자리부터 계산해야 하기 때문)
int arr_len = (fst_num.length() > sec_num.length()) ? fst_num.length() : sec_num.length(); // 배열 길이를 정해줌
int[][] int_arr = new int[3][arr_len];
for(int i = 0; i < arr_len; i++){
int_arr[0][i] = 0; // 첫번째 숫자
int_arr[1][i] = 0; // 두번째 숫자
int_arr[2][i] = 0; // 결과값
} // 배열 초기화
for(int i = 0; i < fst_num.length(); i++){
int_arr[0][i] = fst_num.charAt(i)- 48;
}
for(int i = 0; i < sec_num.length(); i++){
int_arr[1][i] = sec_num.charAt(i)- 48;
}
int carry = 0;
for(int i = 0; i < arr_len; i++){
int sum = carry + int_arr[0][i] + int_arr[1][i];
if(sum > 9) carry = 1; //캐리가 있으면 다음 자릿수에서 같이 더해줌
else carry = 0;
int_arr[2][i] = sum%10;
}
if(carry == 1) System.out.print(1); // 마지막 자릿수에 대한 캐리값
for(int i = arr_len-1; i >= 0; i--){
System.out.print(int_arr[2][i]);
}
}
}
문자열을 뒤집지 않고 해보려했는데 잘 안돼서 생각보다 조금 더 걸렸다.