Developer/Coding

[HackerRank] Plus Minus

jaddong 2020. 8. 28. 17:55
320x100

Plus Minus

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 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

There are 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 integersPrintPrint the ratios of positive, negative and zero values in the array. Each value should be printed on a separate line with 6 digits 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 n space-separated integers that describe arr[n].

Constraints

Output Format

Print the following 3 lines, each to 6 decimals:

  1. proportion of positive values
  2. proportion of negative values
  3. proportion of zerosSample Input
6
-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.

My Solution

const deno = arr.length;
const pos = arr.filter(val => val > 0).length;
const neg = arr.filter(val => val < 0).length;
const zero = arr.filter(val => val === 0).length;

process.stdout.write((pos/deno).toFixed(6)+'\n'+(neg/deno).toFixed(6)+'\n'+(zero/deno).toFixed(6));

Result

  1. 배열에서 조건에 맞게 골라 재배열 만들기
    • 양의 정수, 음의 정수, 영에 해당하는 요소들만 filter로 거른 다음 갯수를 변수에 넣었다.
  2. 비율을 계산한 후 7번째 자리에서 반올림하기
    • 새로 만든 각각의 변수들을 총 arr의 길이로 나누면 소수가 나오는데, 이걸 tofixed(6)로 여섯자리째까지 반올림을 했다.
  3. 출력....?!
    • 그런데 지금까지 funtion안에 return을 통해서 답을 제출했었는데, 계속 에러가 나길래 뭔가 했더니,,,, node.js에서 표준스트림으로 process.stdout.write 를 쓴단다....진짜 몰랐따....ㅠㅠ
    • 평소에 쓰던 conosle.log가 아래와 같이 끝에 엔터가 포함된 process.stdout.write 라는 함수였던 것이었다....! 충격쓰....
console.log = function (d) {
	process.stdout.write(d + '\n');
};

- 참고한 링크 : https://nodejs.org/docs/v0.3.1/api/process.html#process.stdout

 

 

 

process - Node.js Manual & Documentation

Node.js Manual & Documentation process The process object is a global object and can be accessed from anywhere. It is an instance of EventEmitter. Event: 'exit' function () {} Emitted when the process is about to exit. This is a good hook to perform consta

nodejs.org

 

반응형

'Developer > Coding' 카테고리의 다른 글

[HackerRank] Staircase  (1) 2020.08.28
[HackerRank] Diagonal Difference  (0) 2020.08.28
[HackerRank] A Very Big Sum  (0) 2020.08.28
[HackerRank] Compare the Triplets  (0) 2020.08.06
[HackerRank] Simple Array Sum  (0) 2020.08.06