문제 : boj23394
Brute force로 생각하기 쉽지만, 사실 이 경우 10^5C2 만큼 판단해야 할 것이므로 시간내에 통과할 수 없다. 아이디어만 잘 떠올린다면 아주 간단하게 풀 수 있다. 사실 동일한 색상 2개를 고르고 교환하는 부분을 직접 할 필요가 없다. 중요한건 최종적으로 정렬된 순서로 만들 수 있냐이므로, 처음 입력으로 들어왔던 색상의 순서와 시퀀스만 가지고 정렬한 순서의 색상이 동일하다면 실제 색상 2개를 고르고 서로 교환하는 부분은 어떻게든 가능할테니 대충 퉁칠 수 있는 부분이 된다.
예를들어 예제 입력1과 2는 다음과 같다. 처음 입력으로 들어온 색상과, 시퀀스를 기준으로 정렬된 색상의 순서가 서로 다르다면 N, 동일하다면 Y를 출력해주면 된다.
코드 : github
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
class Block {
int a, b;
public Block(int a, int b) {this.a=a; this.b=b;}
}
public class Main extends FastInput {
private void solution() throws Exception {
int n = nextInt();
int k = nextInt();
int[] color = new int[n];
Block[] arr = new Block[n];
for (int i = 0; i < n; i++) {
arr[i] = new Block(nextInt(), nextInt());
color[i] = arr[i].b;
}
Arrays.sort(arr, new Comparator<Block>() {
@Override
public int compare(Block o1, Block o2) {
return o1.a - o2.a;
}
});
for (int i = 0; i < n; i++) {
if (color[i] != arr[i].b) {
System.out.println("N");
return;
}
}
System.out.println("Y");
}
public static void main(String[] args) throws Exception {
initFI();
new Main().solution();
}
}
class FastInput {
private static final int DEFAULT_BUFFER_SIZE = 1 << 16;
private static DataInputStream inputStream;
private static byte[] buffer;
private static int curIdx, maxIdx;
protected static void initFI() {
inputStream = new DataInputStream(System.in);
buffer = new byte[DEFAULT_BUFFER_SIZE];
curIdx = maxIdx = 0;
}
protected static int nextInt() throws IOException {
int ret = 0;
byte c = read();
while (c <= ' ') c = read();
boolean neg = (c == '-');
if (neg) c = read();
do {
ret = ret * 10 + c - '0';
} while ((c = read()) >= '0' && c <= '9');
if (neg) return -ret;
return ret;
}
private static byte read() throws IOException {
if (curIdx == maxIdx) {
maxIdx = inputStream.read(buffer, curIdx = 0, DEFAULT_BUFFER_SIZE);
if (maxIdx == -1) buffer[0] = -1;
}
return buffer[curIdx++];
}
}
'PS > BOJ' 카테고리의 다른 글
백준 2312 자바 - 수 복원하기 (BOJ 2312 JAVA) (0) | 2022.03.03 |
---|---|
백준 3711 자바 - 학번 (BOJ 3711 JAVA) (0) | 2022.03.02 |
백준 2729 자바 - 이진수 덧셈 (BOJ 2729 JAVA) (0) | 2022.02.28 |
백준 2947 자바 - 나무 조각 (BOJ 2947 JAVA) (0) | 2022.02.27 |
백준 14729 자바 - 칠무해 (BOJ 14729 JAVA) (0) | 2022.02.26 |
댓글