Post

[java] 백준 1247번: 부호

문제

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

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

입력

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

출력

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

JAVA 숙달기

1. BufferedReader

  • java.io.BufferedReader 클래스.
  • 데이터가 문자열로 저장되기 때문에 형변환이 필수적이다.
  • 입력값이 엔터만 인식하기 때문에 한 라인에 여러가지를 입력하고 싶으면 stringtokenize.
  • IOExeption(throws).
  • 입력과 동시에 동기화.
  • buffer 사이즈 8192.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class bufferedreader {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		String S = br.readLine();
		
		System.out.println(N);
		System.out.println(S);
	}

}

2. IOException

BufferedReader 예외 처리를 위해 사용

public static void main(String[] args) throws IOException

3. InputStreamReader

바이트 단위로 읽어 들이는 InputStream을 통해 입력을 받은 뒤, 문자 단위로 데이터를 변환시키는 중재자 역할을 하는 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.io.InputStream;
import java.io.InputStreamReader;

public class StreamTest {
    public static void main(String[] args) throws Exception {
        InputStream in = System.in;
        InputStreamReader reader = new InputStreamReader(in);
        char[] a = new char[3];
        reader.read(a);

        System.out.println(a);
    }
}

4. BigInteger

long long으로도 담을 수 없는 무한의 정수가 들어갈 가능성이 있다면 BigInteger을 사용한다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;

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

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

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

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

후기

자바에 익숙하지 않다보니 아무래도 IO와 자료구조를 구현하는데 있어서 모르는 것이 아직은 너무 많다.

This post is licensed under CC BY 4.0 by the author.