본문 바로가기

HackerRank

[HackerRank] Compare the Triplets - Kotlin

Hacker Rank 두번째 문제 풀이한당

너무 쉬운문제인데 코틀린의 장점을 최대한 활용하진 못한 풀이같다

 

Compare the Triplets  (easy)

link - https://www.hackerrank.com/challenges/compare-the-triplets/problem

 

1. 문제 파악하기

 - 입력 : 세개의 점수가 입력된 두개의 배열
            a = [1, 2, 3]
            b = [3, 2, 1]

 - 범위 : 1 ≤ a [i], b[i] ≤ 100  

 - 출력 : a가 더점수가 높은 횟수, b가 점수가 더 높은 횟수를 나란히 배열로 반환한다

             동점인 경우는 count하지 않는다 

 

2. 내 풀이

    하지만 풀고보니 코틀린의 장점을 최대한 잘 활용한것 같지 않다.

    그래서 다른 풀이를 좀 보고 공부하기로 했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fun compareTriplets(a: Array<Int>, b: Array<Int>): Array<Int> {
    var resultArray = arrayOf(00)
    for(index in 0 until a.size) {
        when {
            a[index] > b[index] -> resultArray[0]++
            a[index] < b[index] -> resultArray[1]++
        }
    }
    return resultArray
}
 
fun main(args: Array<String>) {
 
    val a = readLine()!!.trimEnd().split(" ").map{ it.toInt() }.toTypedArray()
 
    val b = readLine()!!.trimEnd().split(" ").map{ it.toInt() }.toTypedArray()
 
    val result = compareTriplets(a, b)
 
    println(result.joinToString(" "))
}
cs

 

3. 다른사람 풀이 참고 

1
2
3
4
5
6
7
8
fun main(args: Array<String>) {
 val a = readLine()!!.split(" ").map { it.toInt() }
 val b = readLine()!!.split(" ").map { it.toInt() }
 val cmp = a.mapIndexed { i,v -> v.compareTo(b[i])}
 print(cmp.count { it > 0 })
 print(" ")
 print(cmp.count { it < 0 })
}
cs

mapIndexed 는  해당 배열을 순차로 돌며 index와 value를 넘겨받는다

해당 값을 compareTo 함수로 비교하는데 크기가 a의 크기가 크면 1, 같으면 0, 작으면 -1 의값을 반환한다.

즉, line 4를 수행하면 [1, 0, -1]과같은 배열이 생성된다

해당배열에 [1, 0, -1].count { 조건 } 과같은 구문을 사용하면 조건에 맞는 배열의 개수를 반환한다!!


배운것 

- mapIndexed

- compareTo

- count

'HackerRank' 카테고리의 다른 글

[HackerRank] Staircase - Kotlin  (0) 2021.07.08
[HackerRank] Plus Minus - Kotlin  (0) 2021.07.05
[HackerRank] Diagonal Difference - Kotlin  (0) 2021.07.04
[HackerRank] Simple Array Sum - Kotlin  (0) 2021.07.02
Hacker Rank 시작하기  (0) 2021.07.02