-
[백준 10757] 큰 수 A+B(Kotlin 풀이)자료구조 & 알고리즘/BOJ 문제풀이 2022. 1. 11. 22:43
1.문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
2. 입력
첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
3. 출력
첫째 줄에 A+B를 출력한다.
4. 포인트
-
- 자료형에 대한 이해
- 구현
4. 문제 풀이
BigInteger 를 통한 간단한 풀이도 있지만 연습하는 과정이기에 함수를 사용하지 않고 풀어보았다.
처음에는 수를 직접 잘라 가는 풀이를 구성했다.
추후 다른 풀이들을 참고 한 결과 길이를 통해 접근하는 방법을 참고하여 고쳐보았고
결과적으로 메모리 와 시간을 줄일 수 있었다.
아마도 String을 직접 잘라서 사용해 객체를 많이 생성한 탓인 것 같다.
// 처음 풀이 - string을 잘라가면 진행 import java.io.BufferedReader import java.io.InputStreamReader import java.util.* import javax.xml.stream.events.Characters fun main() = with(BufferedReader(InputStreamReader(System.`in`))) { val st = StringTokenizer(readLine(), " ") var num1 = st.nextToken() var num2 = st.nextToken() val result = mutableListOf<String>() var carry = 0 while (num1.isNotEmpty() || num2.isNotEmpty()) { var bitA = 0 var bitB = 0 if (num1.isNotEmpty()) { bitA = num1.substring(num1.lastIndex).toInt() num1 = num1.substring(0, num1.lastIndex) } if (num2.isNotEmpty()) { bitB = num2.substring(num2.lastIndex).toInt() num2 = num2.substring(0, num2.lastIndex) } val tempResult = bitA + bitB + carry result.add((tempResult % 10).toString()) carry = if (tempResult > 9) 1 else 0 } if (carry == 1) { result.add("1") } result.reversed().forEach { print(it) } }
// 두번째 풀이 - 길이를 통한 접근 import java.io.BufferedReader import java.io.InputStreamReader import java.lang.StringBuilder import java.util.* import javax.xml.stream.events.Characters // 1052 fun main() = with(BufferedReader(InputStreamReader(System.`in`))) { val st = StringTokenizer(readLine(), " ") var num1Sb = StringBuilder(st.nextToken()) var num2Sb = StringBuilder(st.nextToken()) var resultBilder = StringBuilder() var len1 = num1Sb.length - 1 var len2 = num2Sb.length - 1 var carry = 0 while (len1 >= 0 || len2 >= 0) { var c1 = if (len1 < 0) 0 else Character.getNumericValue(num1Sb[len1]) var c2 = if (len2 < 0) 0 else Character.getNumericValue(num2Sb[len2]) var sum = c1 + c2 + carry var bit = sum % 10 carry = sum / 10 resultBilder.insert(0, bit) len1-- len2-- } if (carry > 0) { resultBilder.insert(0, carry) } println(resultBilder.toString()) }
'자료구조 & 알고리즘 > BOJ 문제풀이' 카테고리의 다른 글
[백준 11726] 2xn 타일링 (Kotlin 풀이) (0) 2022.01.19 [백준 1463] 1로 만들기(Kotlin 풀이) (0) 2022.01.19 [백준 1406] 에디터 (Kotlin 풀이) (0) 2022.01.11 [백준 1052] 물병 (Kotlin 풀이) (0) 2022.01.05 [백준 14888 ] 연산자 끼워넣기 (python 풀이) (0) 2021.10.19 -