본문 바로가기

OJ

[BOJ] 27931 Parity Constraint Closest Pair (Easy) (JAVA)

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

 

27931번: Parity Constraint Closest Pair (Easy)

첫 번째 줄에 서로 다른 두 점의 거리 중 짝수인 최솟값과 서로 다른 두 점의 거리 중 홀수인 최솟값을 공백으로 구분하여 출력한다. 단, 해당하는 거리가 없는 경우 -1을 출력한다.

www.acmicpc.net

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
	
    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < N; i++) {
            pq.offer(Integer.parseInt(st.nextToken()));
        }

        int odd  = Integer.MAX_VALUE;
        int even = Integer.MAX_VALUE;
        int lastOdd  = -1000000001;
        int lastEven = -1000000001;
        int pre = pq.poll();
        if (pre % 2 == 0) lastEven = pre;
        else lastOdd = pre;

        while (!pq.isEmpty()) {
            int next = pq.poll();;

            if (-1000000000 <= lastEven) {
                int oddOrEven = (next - lastEven) % 2;
                if (oddOrEven == 0) even = Math.min(even, next - lastEven);
                else odd = Math.min(odd, next - lastEven);
            }
            if (-1000000000 <= lastOdd) {
                int oddOrEven = (next - lastOdd) % 2;
                if (oddOrEven == 0) even = Math.min(even, next - lastOdd);
                else odd = Math.min(odd, next - lastOdd);
            }

            if (next % 2 == 0) lastEven = next;
            else lastOdd = next;

        }

        System.out.print((even == Integer.MAX_VALUE ? -1 : even) + " " + (odd == Integer.MAX_VALUE ? -1 : odd));

    }

}