
소속중인 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())
}
매번 모범 답을 보면 내가 생각하는 코드와 비슷한데 아직 활용도가 떨어지는 것 같다.
좀 더 익숙해지자.