본문 바로가기
Algorithm/Baekjoon

Baekjoon 1247 부호 JAVA

by Hunveloper 2022. 8. 23.
728x90

문제

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

입력

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

출력

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

풀이

1. 주어지는 정수의 절대값이 64bit의 최대값으로 long으로 사용할 수 있다.

2. 하지만 두 개의 값을 더한다면 오버플로우가 생기는 문제점이 있다.

3. BigInteger를 이용하여 입력받는 값들을 계산한다.

4. BigInteger를 생성할때 String의 형태의 값을 입력하면 String형태를 이용하여 변수의 값을 만들기에 이론상 무한한 값을 저장 가능하다.

5. 값을 입력받으며 기존에 존재하는 BigInteger에 add()함수를 이용하여 값을 더한다.

6. N개의 줄에 걸쳐 저장된 값을 "0"과 비교하여 0이면 0, 1이면 양수, -1이면 음수이기에 이를 삼항연산자를 이용하여 출력

코드
import java.io.*;
import java.math.BigInteger;

public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		for(int i=0;i<3;i++) {
			int n=Integer.parseInt(br.readLine());
			BigInteger a=new BigInteger("0");
			for(int j=0;j<n;j++)
				a=a.add(new BigInteger(br.readLine()));
			int t = a.compareTo(BigInteger.ZERO);
			System.out.println(t==0?"0": t>0?"+":"-");
		}
	}
}

 

728x90
728x90

댓글