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(0, 0)
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 |