강의와 책과 스터디

알고리즘 하기 싫어) day4 GPT랑 알고리즘 문제 풀기

우당탕 오리의 개발모험 2025. 7. 26. 21:25

Git 코드🔗: https://github.com/juheeya401/codingtest/blob/main/src/day4.kt


🧠 알고리즘 Day 4 - 특정 숫자 제거하고 정렬하기 (Kotlin)


✅ 문제 설명

정수 리스트에서 특정 숫자(target)를 모두 제거한 뒤,
남은 숫자들을 오름차순 정렬해서 반환하는 문제.



🎯 입력 예시

nums = listOf(3, 4, 1, 1, 2, 3, 4, 5)
target = 1

🎯 출력 예시

[2, 3, 3, 4, 4, 5]



🧪 풀이 1: Kotlin 편의 함수 사용


fun removeAndSort(nums: List<Int>, target: Int): List<Int> {
    val removedNums = nums.filter { it != target }
    val sortedNums = removedNums.sorted()
    return sortedNums
}

🧠 시간 복잡도

• filter → O(n)
• sorted() → O(n log n)
• 전체: O(n log n)


🔨 풀이 2: 편의 함수 없이 직접 구현 (버블 정렬)


fun removeAndSort2(nums: List<Int>, target: Int): List<Int> {
    val temp = mutableListOf<Int>()
    // O(n): target 제거
    for (i in nums) {
        if (i != target) {
            temp.add(i)
        }
    }

    // O(n²): 버블 정렬
    for (i in 0 until temp.size - 1) {
        for (j in 0 until temp.size - i - 1) {
            if (temp[j] > temp[j + 1]) {
                val t = temp[j]
                temp[j] = temp[j + 1]
                temp[j + 1] = t
            }
        }
    }

    return temp
}

🧠 시간 복잡도

• target 제거: O(n)
• 버블 정렬: O(n²)
• 전체: O(n²)


✍️ 느낀 점

이녀석 GPT! 느낀점까지 써주다니 어딜 감히 나를 넘보냐! 😡
시간복잡도는 아직 잘 이해되지 않는다.
이건 수학적 개념과 정렬에 대한 이해가 더 필요한 듯 하다. 언젠가 다시… 하… 하기싫지만 정렬 다시 들여다봐야겠다.
코틀린으로 풀기 쉽지 않다. 기본 함수가 아직 헷갈린다. 뭐 이건 시간이 해결해 줄 듯.