본문으로 바로가기

[HackerRank] PlusMinus - 문제풀이

category 알고리즘/HackerRank 2022. 3. 8. 22:08

Description

Given an array of integers, calculate the ratios of its elements that are positive, negative, and zero. Print the decimal value of each fraction on a new line with 6 places after the decimal.

Note: This challenge introduces precision problems. The test cases are scaled to six decimal places, though answers with absolute error of up to  are acceptable.

Example

arr =[1,1,0,-1,-1]

There are  n=5 elements, two positive, two negative and one zero. Their ratios are 2/5 = 0.400000, 2/5 = 0.400000   and 1/5=0.200000. Results are printed as:

0.400000
0.400000
0.200000

Function Description

Complete the plusMinus function in the editor below.

plusMinus has the following parameter(s):

  • int arr[n]: an array of integers

PrintPrint the ratios of positive, negative and zero values in the array. Each value should be printed on a separate line with  6digits after the decimal. The function should not return a value.

Input Format

The first line contains an integer, n, the size of the array.The second line contains  space-separated integers that describe arr[n].

Constraints

Output Format

Print the following  lines, each to  decimals:

  1. proportion of positive values
  2. proportion of negative values
  3. proportion of zeros

Sample Input

STDIN           Function
-----           --------
6               arr[] size n = 6
-4 3 -9 0 4 1   arr = [-4, 3, -9, 0, 4, 1]

Sample Output

0.500000
0.333333
0.166667

Explanation

There are 3 positive numbers, 2 negative numbers, and  1 zero in the array. The proportions of occurrence are positive:3/6=0.500000 , negative:2/6=0.333333  and zeros:1/6=0.166667 .

Solution 1. float + format

public static void plusMinus(List<Integer> arr) {
    // Write your code here
    int len = arr.size();
    int positive = 0;
    int negative = 0;
    int zero = 0;
    Collections.sort(arr);
    for(int i =0; i<len; i++){
        if(arr.get(i) < 0 ){
            negative++;
        }else if(arr.get(i) == 0){
            zero++;
        }else{
            positive = len-i;
            break;
        }
    }
    System.out.format("%6f", (float)positive/(float)len);
    System.out.println();
    System.out.format("%6f", (float)negative/(float)len);
    System.out.println();
    System.out.format("%6f", (float)zero/(float)len);
    System.out.println();

}

6자리의 정밀도 표현까지 기재되어 있으므로 소수점계산을 위해 7자리까지 표현이 가능한 float를 사용해 계산하고 System.out.format 을 통해 기재된 포맷으로 출력합니다.

Reference

 

Plus Minus | HackerRank

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

www.hackerrank.com