[백준 1001] A-B

백준 1001번: A-B - 상세 풀이

🔍 1. 문제 소개

백준 온라인 저지 1001번 문제 "A-B"는 두 개의 정수 A와 B를 입력받아 A-B의 결과를 출력하는 간단한 문제입니다. 입력되는 정수 A와 B는 0보다 크고 10보다 작은 정수입니다.

💡 2. 문제 해석

문제의 핵심은 두 정수의 차를 계산하는 것입니다. 제약 조건으로는 A와 B가 모두 1 이상 9 이하의 정수라는 점이 있습니다. 따라서 음수 결과가 나올 수도 있습니다. 입력은 공백으로 구분된 두 개의 정수이며, 출력은 계산 결과인 정수 하나입니다.

🧠 3. 접근 방법

문제 해결을 위한 알고리즘은 매우 단순합니다. 입력으로 받은 두 정수 A와 B에 대해 단순히 A-B 연산을 수행하고 결과를 출력하면 됩니다. 특별한 알고리즘이나 자료구조가 필요하지 않습니다.

⚙️ 4. 구현 과정

  1. **입력:** 표준 입력(stdin)으로부터 두 개의 정수를 공백으로 구분하여 입력받습니다.

2. 연산: 입력받은 두 정수에 대해 A-B 연산을 수행합니다. 3. 출력: 연산 결과를 표준 출력(stdout)으로 출력합니다.

💻 5. 코드 설명

다음은 Kotlin을 사용한 구현 코드입니다. 두 가지 버전을 보여줍니다. 첫 번째는 더 직관적이고, 두 번째는 미세한 성능 향상을 위해 함수 참조를 사용한 버전입니다. 실제 성능 차이는 거의 없으므로 가독성을 우선적으로 고려하여 선택하는 것이 좋습니다.

버전 1 (직관적인 버전):

fun main() {
    val input = readLine()!!.split(" ")
    val a = input[0].toInt()
    val b = input[1].toInt()
    println(a - b)
}

버전 2 (함수 참조 사용):

fun main() {
    val (a, b) = readLine()!!.split(" ").map(String::toInt)
    println(a - b)
}

두 코드 모두 동일한 기능을 수행합니다. readLine()으로 입력을 받고, split(" ")으로 공백을 기준으로 문자열을 분리합니다. 버전 1에서는 각 문자열을 개별적으로 toInt()로 변환하는 반면, 버전 2에서는 map(String::toInt)를 사용하여 한 번에 두 문자열을 정수로 변환합니다. String::toIntString 타입의 객체에 toInt() 함수를 적용하는 함수 참조입니다.

⏱️ 6. 시간 복잡도와 공간 복잡도 분석

* 시간 복잡도: O(1) 입니다. 입력 값의 크기와 관계없이 일정한 시간 내에 연산이 완료됩니다. 입력, 연산, 출력 과정 모두 상수 시간에 수행됩니다. * 공간 복잡도: O(1) 입니다. 입력으로 받는 정수의 개수가 일정하며, 사용하는 변수의 개수도 일정합니다. 입력 크기가 증가해도 사용하는 메모리 크기는 변하지 않습니다.

🎯 7. 결론

이 문제는 매우 간단한 문제이지만, 입력과 출력, 기본적인 연산을 다루는 기본적인 프로그래밍 능력을 평가하는 데 유용합니다. 코드의 효율성 측면에서는 이미 최적화되어 있으므로 더 이상의 개선은 실질적인 이점을 가져오지 않습니다. 이 문제를 통해 Kotlin의 기본적인 입력/출력, 문자열 처리, 그리고 간단한 연산을 다루는 방법을 익힐 수 있습니다. 함수 참조를 사용한 코드는 미세한 성능 향상을 기대할 수 있지만, 가독성을 떨어뜨리지 않는 범위 내에서만 사용하는 것이 바람직합니다.

다음 이전