본문 바로가기

HackerRank

[HackerRank] Plus Minus - Kotlin

Plus Minus (easy)

link - 

https://www.hackerrank.com/challenges/plus-minus/problem

 

Plus Minus | HackerRank

Calculate the fraction of positive, negative and zero values in an array.

www.hackerrank.com

 

 

1. 문제 파악하기

- 주어진 배열에 양수/ 0 / 음수의 비율을 출력하기

- 비율을 소수점 이하 여섯자리까지 출력한다

 

2. 아이디어

- compareTo(0) 을 사용해서 0을 기준으로 배열을 새로생성한다  (-1, 0, 1 로 균일화)

- kotlin의 count 함수를 사용하여 쉽게 개수를 구한다 (-1개수/ 0개수/ 1개수 카운트)

- 반올림을 위해 round 함수를 사용한다 

- round함수는 소수점 이하 몇자리 인지 표현가능하도록 생성했는데 올림하고자 하는 만큼을 소수점 위로 올리고, round를 통해 반올림한뒤 다시 소수점 이하로 돌려놓는다

 

3. 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
fun round(value:Double, n:Double): Double {
    val m = Math.pow(10.0, n)
    return (Math.round(value * m)/m)
}
 
fun plusMinus(arr: Array<Int>): Unit {
    val compareArray = arr.map { v ->
        v.compareTo(0)
    }
    val minus = compareArray.count{ it < 0 }
    val zero = compareArray.count{ it == 0 }
    val plus = compareArray.count{ it > 0 }
    
    println("%.6f".format(round(plus/arr.size.toDouble(), 6.toDouble())))
    println("%.6f".format(round(minus/arr.size.toDouble(), 6.toDouble())))
    println("%.6f".format(round(zero/arr.size.toDouble(), 6.toDouble())))
}
 
fun main(args: Array<String>) {
    val n = readLine()!!.trim().toInt()
 
    val arr = readLine()!!.trimEnd().split(" ").map{ it.toInt() }.toTypedArray()
 
    plusMinus(arr)
}
 
cs