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));
}
}
'OJ' 카테고리의 다른 글
[BOJ] 3986 좋은 단어 (JAVA) (1) | 2023.05.16 |
---|---|
[BOJ] 20301 반전 요세푸스 (JAVA) (0) | 2023.05.15 |
[BOJ] 14909 양수 개수 세기 (JAVA) (0) | 2023.05.13 |
[BOJ] 27930 당신은 운명을 믿나요? (JAVA) (0) | 2023.05.12 |
[BOJ] 2418 정수 a를 k로 만들기 (JAVA) (0) | 2023.05.11 |