BASIC | 직사각형의 마지막 꼭지점 (배열에서 중복 없는 수 찾기)

chaen·2024년 1월 31일
post-thumbnail

📌 문제

직사각형을 그리려고 할 때, 세 개의 꼭지점 x, y 좌표가 주어진다. 마지막 x,y 좌표를 출력하는 프로그램을 구현하세요.

let input = [
    [[5, 5, 8], [5, 8, 5]],
    [[3, 1, 1], [2, 1, 2]],
    [[7, 7, 3],[4, 1, 1]],
];

for (let i = 0; i < input.length; i++){
    process.stdout.write(`#${i+1} `);
    console.log(answer(input[i][0], input[i][1]));
}

✨ 해결 방법

현재 세 꼭지점의 좌표가 주어진다면, 직사각형 특성 상 같은 x나 y값이 두 번씩 나와야 하므로 해당 배열에서 한번만 나온 수가 남은 좌표의 값일 것입니다. 따라서 중복이 없는 수를 검사하면 됩니다.

💻 solution 1

function answer(x_arr, y_arr){
    let result = [];
  
    if ( x_arr[0] === x_arr[1]){
        result.push(x_arr[2]);
    } else if ( x_arr[0] === x_arr[2]){
        result.push(x_arr[1]);
    } else {
        result.push(x_arr[0]);
    }

    if ( y_arr[0] === y_arr[1]){
        result.push(y_arr[2]);
    } else if ( y_arr[0] === y_arr[2]){
        result.push(y_arr[1]);
    } else {
        result.push(y_arr[0]);
    }

    return result;
}

if문을 사용하여 하나씩 검사합니다. x 좌표의 0번째와 1번째, 0번째와 2번째, 1번째와 2번째의 경우를 설정하여 중복이 없는 수를 각각 골라 빈 배열result 에 넣습니다. y도 마찬가지로 구합니다.

💻 solution 2

function answer(x_arr, y_arr){
    let result = [];

    function findUnique(arr) {
        for (let i = 0; i < arr.length; i++) {
            if (arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])) {
                return arr[i];
            }
        }
    }

    result.push(findUnique(x_arr));
    result.push(findUnique(y_arr));
    return result;
}

findUnique라는 함수를 하나 만들어 사용합니다. for문과 if문을 사용하여 해당 숫자가 나오는 첫 인덱스와 마지막 인덱스가 같을 경우 중복이 없음을 판결하고, 해당 값을 리턴하는 함수입니다. 여기에 x, y 좌표를 넣은 후 result에 넣습니다.

0개의 댓글