자료구조 & 알고리즘/BOJ 문제풀이
[백준 10757] 큰 수 A+B(Kotlin 풀이)
쉽코기
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())
}