21.07.07 기록
-
백준 알고리즘 10757 풀이
-
- 나의 풀이1(메모리 17.5MB, 시간 248ms로 통과)
- 값의 범위가 Long 타입의 범위를 훨씬 넘어서 다른 클래스를 찾아보다가
BigInteger클래스를 발견했다. - 입력 값을
BigInteger의 인스턴스로 생성한 후, 두 개의 인스턴스 값을 더하여 결과를 출력했다.
- 나의 풀이1(메모리 17.5MB, 시간 248ms로 통과)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.math.BigInteger; public class B10757 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); BigInteger A = new BigInteger(st.nextToken()); BigInteger B = new BigInteger(st.nextToken()); System.out.println(A.add(B)); } }📝BigInteger 클래스
-무한대의 수를 표현할 수 있는 클래스이다.
-BigInteger 클래스를 생성할 때 BingInteger(String val)를 사용할 수 있다.(JavaDoc 참조)
-String으로 값을 받기 때문에 사칙연산을 사용할 수 없고, 클래스의 add() 메소드 등을 사용한다.
-
- 나의 풀이2(메모리 14.6MB, 시간 136ms로 통과)
- 입력값을 문자열로 받은 후 두 수를 각각의 배열로 저장한다.
- 처음에 천의 자리 -> 일의 자리 순으로 저장했더니 두 수의 자릿수가 다를 때에는 연산 결과가 이상하게 나왔다.(역순으로 저장하여 해결.)
- 각 자리 수를 셈한 결과를 result[] 배열에 저장하고 원래 순서대로 출력한다.
- 나의 풀이2(메모리 14.6MB, 시간 136ms로 통과)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class B10757 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //1. 문자열로 받은 입력값을 분리 StringTokenizer st = new StringTokenizer(br.readLine(), " "); String aStr = st.nextToken(); String bStr = st.nextToken(); //2. 더 큰 수의 자리수로 배열 길이 설정 int maxLength = Math.max(aStr.length(), bStr.length()); int[] A = new int[maxLength]; int[] B = new int[maxLength]; //3. 입력받은 수의 각 자리수를 배열로 저장 (역순) //ex. 4739 2653 -> {9, 3, 7, 4}, {3, 5, 6, 2} for(int i = (aStr.length() - 1), j = 0; i >= 0 ; i--, j++) { A[i] = aStr.charAt(j)-48; } for(int i = (bStr.length() - 1), j = 0; i >= 0 ; i--, j++) { B[i] = bStr.charAt(j)-48; } //4. 각 자리 수 덧셈 int[] result = new int[maxLength+1]; for(int i = 0; i < maxLength; i++) { int sum = (A[i] + B[i] + result[i]) ; result[i] = (sum % 10); result[i+1] += (sum / 10); } StringBuilder sb = new StringBuilder(); if(result[maxLength] != 0) { sb.append(result[maxLength]); } for(int i = maxLength-1; i >= 0; i--) { sb.append(result[i]); } System.out.println(sb); } }- 해설을 찾아보니 로직이 거의 비슷했다.(코드 생략)
-