[백준Java] 1247번_부호

박주현·2023년 10월 19일
0

Baekjoon

목록 보기
21/24
post-thumbnail

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

1. 문제

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

2. 입력

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
2 초 256 MB 15148 4833 4250 36.468%
문제
N개의 정수가 주어지면, 이 정수들의 합 S의 부호를 구하는 프로그램을 작성하시오.

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

3. 출력

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

4. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;

public class Num1247 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        for (int i = 0; i < 3; i++) {
            BigInteger answer = new BigInteger("0");
            int N = Integer.parseInt(br.readLine());

            for (int j = 0; j < N; j++) {
                BigInteger N2 = new BigInteger(br.readLine());
                answer = answer.add(N2);
            }

            if(answer.compareTo(BigInteger.ZERO) == -1){
                System.out.println("-");
            }else if(answer.compareTo(BigInteger.ZERO) == 1){
                System.out.println("+");
            }else{
                System.out.println(0);
            }

        }
    }
}


5. 학습한 내용

Long 과 BigInteger

이 문제를 풀때, 가장 중요한 부분이라고 생각한다.
해당 테스트셋의 범위에 맞게 Long 또는 BigInteger를 사용해야하기에 두개의 차이점에 대해서 학습하였다.

먼저, BigInteger부터 설명하자면
간단하게 얘기해서 Long보다 큰 수를 표현하기에 적합한 범위를 갖고 있다. 우리가 흔히 아는 사칙연산(+,-,*,/) 을 활용하여 연산을 할 수 없다는 특징이 있으며 메서드를 사용해서 연산해야 한다.

  • BigInteger A = new BigInteger("3");
  1. 덧셈 : System.out.println("3+3 = "+bigNum.add(BigInteger.valueOf(3)));
  2. 뺄셈 : System.out.println("3-1="+bigNum.subtract(BigInteger.valueOf(3)));
  3. 곱셈 : System.out.println("3* 3="+bigNum.multiply(BigInteger.valueOf(3)));
  4. 나눗셈 : System.out.println("3/3="+bigNum.divide(BigInteger.valueOf(3)));
  5. 나머지 :
    System.out.println("3%3="+bigNum.mod(BigInteger.valueOf(3)));

비교

BigInteger bigNumber1 = new BigInteger("100000");
BigInteger bigNumber2 = new BigInteger("1000000");
		
int compare = bigNumber1.compareTo(bigNumber2);

비교시에는 compareTo를 사용하여 두 수를 비교한다.


BigInteger.ZERO

if(answer.compareTo(BigInteger.ZERO) == -1){
      System.out.println("-");
}else if(answer.compareTo(BigInteger.ZERO) == 1){
      System.out.println("+");
}else{
     System.out.println(0);
}

BigInteger.ZERO는 0을 표현하는 것으로
해당 문제에서 answer이 BigInteger.ZERO보다 크면 "+"
작으면 "-" 을 출력한다.

profile
빌드업 막 시작하는 개발자

0개의 댓글