[JavaSrcipt] Baekjoon - 3009 : 네 번째 점
문제
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
입력
세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 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