문제 번호
알고리즘 분류
문제 풀이
하나의 점을 구하기 위한 3개의 점이 주어진다. 우리는 x좌표중에 혼자 다른애, y좌표중에 혼자 다른애를 찾아서 답으로 출력하면된다.
예를 들어
30 20
10 10
10 20
가 입력으로 주어진다고 할때, x좌표중에 혼자 다른애는 30이고, y좌표중에 혼자 다른애는 10 이다. 그러므로 정답으로 30 10을 출력하면된다.
이 문제를 처음 풀때는 입력받은 숫자들을 일일히 비교해서 다른애를 찾아서 풀었던것 같다. 근데 여기서 XOR을 사용하면 좀더 현명하게 풀 수 있다.
XOR은 비교하려는 두개의 수가 '다르면' 참(1) 을 반환하고 '같으면' (0)을 반환한다. 정확히는 주어진 두개의 수를 이진수로 바꾸어서 각자리의 숫자를 XOR연산하여 결과값을 낸다.
그럼 우리는 XOR 연산을 사용하여 주어진 입력들을 비교하면된다.
let x = 0, y = 0;
x ^= a
y ^= b;
위와 같을때 x값은 0 -> 30 -> 20 -> 30 이 되고 y 값은 0 -> 20 -> 30 -> 10 이 된다. 처음에는 ' XOR 연산은 같으면 0, 다르면 1을 반환한다며?!' 했었는데 비트연산을 직접해보고 알았다. (기본적인건데 하도 안써봐서....)
전체코드
const input = require('fs').readFileSync('input.txt').toString().split('\n');
sol()
function sol() {
let x = 0, y = 0;
let a,b
for (let i = 0; i < 3; i++) {
[a, b] = input[i].split(' ').map(Number);
console.log(x,y);
x ^= a
y ^= b;
}
console.log(x,y);
}
특이사항
거의 사용한적없던 XOR을 사용해본 좋은 경험이였다.
'Algorithm > BaeKJoon' 카테고리의 다른 글
[JS][백준]12865_평범한 배낭 (2) | 2022.01.19 |
---|---|
[JS][백준]10844_쉬운 계단 수 (0) | 2022.01.17 |
[JS][백준]4948_베르트랑 공준 (0) | 2022.01.03 |
[JS][백준]9020_골드바흐의 추측 (0) | 2022.01.03 |
[JS][백준]1712_손익분기점 (0) | 2021.12.30 |