문제

N개의 정수가 주어지면, 이 정수들의 합 S의 부호를 구하는 프로그램을 작성하시오.

 

 

입력

총 3개의 테스트 셋이 주어진다. 각 테스트 셋의 첫째 줄에는 N(1 ≤ N ≤ 100,000)이 주어지고, 둘째 줄부터 N개의 줄에 걸쳐 각 정수가 주어진다. 주어지는 정수의 절댓값은 9223372036854775807보다 작거나 같다.

 

 

출력

총 3개의 줄에 걸쳐 각 테스트 셋에 대해 N개의 정수들의 합 S의 부호를 출력한다. S=0이면 "0"을, S>0이면 "+"를, S<0이면 "-"를 출력하면 된다.

 

 

풀이

일단 입력값의 기준치를 보면 엄청나게 큰 숫자라는 것을 바로 알 수 있다.

큰 숫자는 당연히 number type이 아닌 BigInt를 사용해야 한다는 것만 주의하면 간단하게 해결할 수 있는 문제로

각각의 값들을 입력받은 다음 해당 값들의 합을 음, 양, 0 3가지로 구별하면 되는 문제였다.

 

다만 비교하거나 더할 때도 숫자에 n을 붙여야 BigInt type과 연산이 된다는 사실을 주의해야 한다.

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(BigInt)

const arrs = []
for(let i = 0 ; i < input.length ; i++){
    arrs.push(input.slice(i+1,i+Number(input[i])+1))
    if(Number(input[i]) > 0){
        i = i+Number(input[i])
    }
}

for(let i = 0 ; i < arrs.length; i++){
    arrs[i] = arrs[i].reduce((a,b) => a+b)
    if(arrs[i] > 0n){
        arrs[i] = '+'
    }
    else if(arrs[i] === 0n){
        arrs[i] = 0
    }
    else if(arrs[i] < 0n){
        arrs[i] = '-'
    }
}

console.log(arrs.join('\n'))
const input = `3
0
0
0
10
1
2
4
8
16
32
64
128
256
-512
6
9223372036854775807
9223372036854775806
9223372036854775805
-9223372036854775807
-9223372036854775806
-9223372036854775804`.split('\n').map(BigInt)

const arrs = []
for(let i = 0 ; i < input.length ; i++){
    console.log(input.slice(i+1,i+Number(input[i])+1))
    arrs.push(input.slice(i+1,i+Number(input[i])+1))
    if(Number(input[i]) > 0){
        i = i+Number(input[i])
    }
}

for(let i = 0 ; i < arrs.length; i++){
    arrs[i] = arrs[i].reduce((a,b) => a+b)
    if(arrs[i] > 0n){
        arrs[i] = '+'
    }
    else if(arrs[i] === 0n){
        arrs[i] = 0
    }
    else if(arrs[i] < 0n){
        arrs[i] = '-'
    }
}

console.log(arrs.join('\n'))

'알고리즘 > 백준' 카테고리의 다른 글

[백준 JS] 1284번 집 주소  (0) 2023.03.13
[백준 JS] 1267번 핸드폰 요금  (0) 2023.03.13
[백준 JS] 1085번 직사각형에서 탈출  (0) 2023.03.09
[백준 JS] 24751번 Betting  (0) 2023.03.09
[백준 JS] 15552번 빠른 A+B  (0) 2023.03.09

+ Recent posts