[JS][백준]3009_네 번째 점 (XOR)
Algorithm/BaeKJoon

[JS][백준]3009_네 번째 점 (XOR)

문제 번호

 

3009번: 네 번째 점

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

www.acmicpc.net

 

 

 

알고리즘 분류

 

문제 풀이

 하나의 점을 구하기 위한 3개의 점이 주어진다. 우리는 x좌표중에 혼자 다른애, y좌표중에 혼자 다른애를 찾아서 답으로 출력하면된다.

 

예를 들어 

30 20
10 10
10 20

가 입력으로 주어진다고 할때, x좌표중에 혼자 다른애는 30이고, y좌표중에 혼자 다른애는 10 이다. 그러므로 정답으로 30 10을 출력하면된다. 

 이 문제를 처음 풀때는 입력받은 숫자들을 일일히 비교해서 다른애를 찾아서 풀었던것 같다. 근데 여기서 XOR을 사용하면 좀더 현명하게 풀 수 있다. 

 

 XOR은 비교하려는 두개의 수가 '다르면' 참(1) 을 반환하고 '같으면' (0)을 반환한다. 정확히는 주어진 두개의 수를 이진수로 바꾸어서 각자리의 숫자를 XOR연산하여 결과값을 낸다.

http://www.tcpschool.com/c/c_operator_bitwise

 그럼 우리는 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