Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 3009 : 네 번째 점

비망노트 2021. 10. 5. 23:24

문제

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

입력

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

출력

직사각형의 네 번째 점의 좌표를 출력한다.

 

예제입력 예제출력
5 5
5 7
7 5
7 7
30 20
10 10
10 20
30 10

❌ 풀이

const input=require('fs').readFileSync('/dev/stdin').toString().split('\n');
const arr=input.map(a=>a.split(' ').map(b=>Number(b)));

let x=0;
let y=0;

for(let i=0;i<arr.length;i++) {
    let count=0;
    for(let j=0;j<arr.length;j++){
        if(arr[i][0]==arr[j][0]){
            count++;
        }
    }
    if(count==1){
        x=arr[i][0];
    }
}
for(let i=0;i<arr.length;i++) {
    let count=0;
    for(let j=0;j<arr.length;j++){
        if(arr[i][1]==arr[j][1]){
            count++;
        }
    }
    if(count==1){
        y=arr[i][1];
    }
}
console.log(`${x} ${y}`);

직관적으로밖에 생각을 못해서 이렇게 구현했으나 틀렸다.

arr를 만들 후 해당 0인덱스를 본인인덱스까지 비교해서

같으면 count++즉 첫번째예제로 예를들면

7과 자기자신7을 비교하는경우가 한번이므로 count==1이니까

해당값을 x로 y로 받았는데 해시코드에서는 답이 나오긴한데..

 

✅ 다른분의 풀이

const input=require('fs').readFileSync('/dev/stdin').toString().split('\n');
let arrayX = [];
let arrayY = [];
let x;
let y;

for(let i = 0; i < 3; i++){
    arrayX.push(Number(input[i].split(" ")[0]));
    arrayY.push(Number(input[i].split(" ")[1]));
}
arrayX = arrayX.sort();
arrayy = arrayY.sort();

x = arrayX[1] === arrayX[0] ? arrayX[2] : arrayX[0];
y = arrayY[1] === arrayY[0] ? arrayY[2] : arrayY[0];

console.log(`${x} ${y}`);

x,y 즉 '\n' 개행을 기준으로 나눈 input배열을

' '기준으로 다시한번 나누며 0인덱스와 1인덱스를 각각

arrayX arrayY에 다 넣는다.

arrayX = [30, 10, 10]
arrayY = [20, 10, 20]

 

❗여기서 sort 로 정렬해준뒤

arrayX = [10,10,30]
arrayY = [10,20,20]

해당배열의 [0]과 [1]을 비교해 같을경우 [2]가 한번나온것이므로 [2]가 네번째점의 좌표

같지않을경우 [0]이 네번째점의 좌표

sort를 하지않았다면 20 10 20 이렇게 있는경우에는 답이 틀리게된다.

 

네번째 점의 x좌표와 y좌표를 구해내려면 어떤 요소가 1개인지 알아내야 하는데,

비교할 숫자가 갯수가 많지 않기 때문에

굳이 각 요소를 반복문으로 돌면서 개수를 카운트할 필요 없이,

그냥 배열을 정렬한 후 삼항연산자를 사용하여

배열의 첫번째 요소와 같은지 비교하고 참이면 세번째 요소가 답이 되고

거짓이면 첫번째요소가 답이 된다.

 

✅ sort

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]

const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// expected output: Array [1, 100000, 21, 30, 4]

 

-출처

https://www.acmicpc.net/problem/3009

 

https://nyang-in.tistory.com/194

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort