import java.util.HashMap;
class Solution {
public int[] solution(int[][] v) {
int[] answer = new int[2];
// x, y 좌표의 등장 횟수를 저장할 HashMap
HashMap<Integer, Integer> xCount = new HashMap<>();
HashMap<Integer, Integer> yCount = new HashMap<>();
// 좌표 등장 횟수 세기
for (int i=0; i<v.length; i++) {
int x = v[i][0];
int y = v[i][1];
xCount.put(x, xCount.getOrDefault(x, 0)+1);
yCount.put(y, yCount.getOrDefault(y, 0)+1);
}
// 등장 횟수가 1인 x, y 좌표 찾기
for (int key : xCount.keySet()) { // 키값 가져오기
if (xCount.get(key) == 1) { // 키값에 해당하는 값 가져오기
answer[0] = key;
break;
}
}
for (int key : yCount.keySet()) { // 키값 가져오기
if (yCount.get(key) == 1) { // 키값에 해당하는 값 가져오기
answer[1] = key;
break;
}
}
return answer;
}
}
프로그래머스 코테 사전 모의 테스트 하러 들어갔다가 있던 문제인데 막혀서 너무 오래 걸렸다 !! HashMap을 쓰는 방법을 공부할 수 있었다. (HashMap 정리한 것)
근데 정말 간단한 풀이 발견...... 어이무 !!
public int[] solution(int[][] v) {
int x = 0, y = 0;
// XOR 연산을 통해 유일하게 한 번만 나타나는 x, y 값을 찾습니다.
for (int i = 0; i < 3; i++) {
x ^= v[i][0]; // x좌표
y ^= v[i][1]; // y좌표
}
// 나머지 한 점의 좌표 [x, y] 반환
return new int[]{x, y};
}
XOR 연산은 비트 단위의 연산으로, 두 비트가 같으면 0을, 다르면 1을 반환한다. 자바에서는 ^ 기호를 사용하여 XOR 연산을 수행한다.
XOR의 주요 특징
같은 값을 두 번 XOR하면 0이 된다 : a ^ a = 0
0과 어떤 값을 XOR하면 그 값 자체가 된다 : a ^ 0 = a
XOR 연산은 교환 법칙과 결합 법칙이 성립하여, 순서에 관계없이 연산 결과가 동일하다.
이 특성을 사용하면, 동일한 값이 여러 번 XOR 연산에 등장하면 결국 사라지고, 유일하게 한 번만 등장한 값만 남게 된다.