728x90
반응형

백준알고리즘

- Bronze 3 -

 #1247. 부호 by Java and Javascript

 


 

문제

출처: https://www.acmicpc.net/problem/1247 

 


 

접근 방법

1. 주어지는 정수의 절댓값이 int의 범위를 넘어섬 >> BigInteger 사용

2. BigInteger들을 더해야하므로 x.add(bigInt) 사용

3. BigInteger를 사용하기 때문에 Java에서는 compareTo() 이용

 


 

풀이

▶ Java

import java.io.*;
import java.math.*;

public class Main {
	
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = 0;
        BigInteger zero = new BigInteger("0"); // 부호판별시 사용할 BigInt 0
        
        for(int i=0; i<3; i++) { // 총 3문제가 나온다고 했으므로 3번 반복
        	n = Integer.parseInt(br.readLine());
			BigInteger s = new BigInteger("0"); // n개의 수를 더해줄 BigInt 변수 선언
			
        	for(int j=0; j<n; j++) {
    			BigInteger bi = new BigInteger(br.readLine());
    			s = s.add(bi); // 변수 s에 BigInt bi를 더해준 값을 저장
    		}
        	
                // A.compareTo(B) : A와 B를 비교하여 0, 1, -1 반환(A=B / A>B / A<B)
        	if(s.compareTo(zero) == 0) {
        		System.out.println(0);
        	} else if (s.compareTo(zero) == -1) {
        		System.out.println("-");
        	} else {
        		System.out.println("+");
        	}
        }
        
    }
}

 

▶ Javascript (node.js)

var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().trim().split('\n').map(BigInt);
var zero = BigInt("0");

for(var i=0; i<input.length;){
	var n = Number(input[i]);
	var s = BigInt("0");
	
	for(var j=1; j<=n; j++){
		s += input[i+j];
	}
	
	var result = s.toString(); // BigInt를 숫자화
	
	if(result == 0){
		console.log(0);
	} else if (result > 0){
		console.log("+");
	} else  {
		console.log("-");
	}
	
	i += (n+1);
}

Javascript로 푸는 경우 이미 입력값들을 배열에 저장한 뒤 사용하기 때문에, 반복문을 돌릴 때 주의해야 한다.

또한 Java와 달리 BigInt의 값은 "1n"의 형식으로 n이 붙어서 나오기 때문에, toString()을 이용해서 숫자화 해준 뒤 비교해줘야 한다.

 


 

결과

Java가 두 번 있는 이유는 시간 줄여보겠다고 하다가,, 오히려 늘어나버린,,

 


 

 

 

 

 

End.

heisely's 괴발개발 개발일지

 

728x90
반응형

+ Recent posts