[A&I Code Camp] Day9

Hood·2024년 9월 19일

A&I Code Camp

목록 보기
9/38
post-thumbnail

✍   Kotlin을 사용한 프로그래머스 Lv. 0 문제 풀기

소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
주말을 제외한 모든 날에 하루 5문제씩
프로그래머스 Lv.0 문제에 대한 풀이입니다.
해당 포스트는 kotlin을 기반으로 작성합니다.


마지막 두 원소

이 문제는 어제 사용한 takeLast를 사용해서 마지막 두 원소를 얻고 비교해서
조건에 따른 값을 얻어주는 식으로 풀었다.
그런데 toMutableList()를 잘 활용하면 더욱 간결한 방법으로 풀 수 있다는 것을 알았다.

class Solution {
    fun solution(num_list: IntArray): IntArray {
        val answer = num_list.takeLast(2)
        var list = num_list
        list += if(answer[0] < answer[1]){
            (answer[1] - answer[0])
        } else {
            (answer[1] * 2)
        }
        return list
    }
}
//모범 답
class Solution {
    fun solution(num_list: IntArray): IntArray {
        val answer = num_list.toMutableList().apply {
            val (first, second) = num_list.takeLast(2)
            if (first < second) add(second - first)
            else add(second + second)
        }
        return answer.toIntArray()
    }
}

이어 붙인 수

이 문제는 짝수와 홀수끼리 수를 이어 붙여 그 값을 더해주는 문제이다.
그래서 even과 odd의 문자열을 만들고 짝수 홀수를 각각 안으로 넣어주어
Int형으로 바꾸어 풀어주었다.

class Solution {
    fun solution(num_list: IntArray): Int {
        var even = ""
        var odd = ""
        for (x in num_list.indices) {
            if(num_list[x] % 2 == 0){
                even += num_list[x]
            } else {
                odd += num_list[x]
            }
        }
        return even.toInt() + odd.toInt()
    }
}
//모범 답
class Solution {
    fun solution(num_list: IntArray): Int {
        val odd = num_list.filter { it % 2 == 1 }.joinToString("").toInt()
        val even = num_list.filter { it % 2 == 0 }.joinToString("").toInt()

        return odd + even
    }
}

원소들의 곱과 합

이 문제는 원소들의 합에 제곱을 한 것과 모두 곱했을 때 어떤 것이 더 큰지를 알아보는 문제이다.
그래서 조건대로 변수를 만들고 비교해주었다.

import kotlin.math.pow

class Solution {
    fun solution(num_list: IntArray): Int {
        val add = num_list.sum().toDouble().pow(2)
        var multi = 1

        for(x in num_list.indices){
            multi *= num_list[x]
        }

        if (add.toInt() > multi) {
            return 1
        } else {
            return 0
        }
    }
}
//모범 답
class Solution {
    fun solution(num_list: IntArray): Int {
        val sum = num_list.sum().let { it * it }
        val multiply = num_list.reduce { acc, n -> acc * n }
        return if (multiply < sum) 1 else 0
    }
}

두 수의 연산값 비교하기

이 문제는 숫자를 이어 붙인 것과 2ab를 곱한 것 중 무엇이 큰지 비교하는 문제이다.
그래서 조건대로 비교하고 출력해 주었다.
그런데 모범 답에서 max를 사용하는 방법으로 간결하게 풀 수 있다.

class Solution {
    fun solution(a: Int, b: Int): Int {
        val strAdd: String = a.toString() + b.toString()
        val IntAdd: Int = 2 * a * b

        return if (strAdd.toInt() > IntAdd) {
            strAdd.toInt()
        } else {
            IntAdd
        }
    }
}
//모범 답
import kotlin.math.*

class Solution {
    fun solution(a: Int, b: Int): Int {
        return max("$a$b".toInt(), 2 * a * b)
    }
}

더 크게 합치기

위 문제를 참조하여 max를 사용하여 ab순서만 바꾸어 비교하고 출력해주었다.

import kotlin.math.*

fun solution(a: Int, b: Int): Int {
    return max("$a$b".toInt(), "$b$a".toInt())
}

📌결론

매번 모범 답을 보면 내가 생각하는 코드와 비슷한데 아직 활용도가 떨어지는 것 같다.
좀 더 익숙해지자.

profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글