본문 바로가기
Study Note/Algorithm

프로그래머스 #데모 테스트 - 직사각형 마지막 한점 좌표 구하기

by 시뮝 2021. 1. 22.
728x90

 

방법1 - 중복이 아닌 수를 구하여 반환

function solution(v) {
    let answer = [],
        position_x = [...new Set([v[0][0], v[1][0], v[2][0]])],
        position_y = [...new Set([v[0][1], v[1][1], v[2][1]])];
    
    // x position setting
    let answer_x = v.filter(vv=>vv[0]==position_x[0])
    if(answer_x.length===1) {
        answer.push(position_x[0]);
    } else {
        answer.push(position_x[1]);
    }
    
    // y position setting
    let answer_y = v.filter(vv=>vv[1]==position_y[0])
    if(answer_y.length===1) {
        answer.push(position_y[0]);
    } else {
        answer.push(position_y[1]);
    }
    
    return answer;
}

 

풀이과정은 이렇습니다. Set으로 중복을 제거한 x좌표와 y좌표를 수집한 뒤 x좌표가 하나만 있는 경우는 부족한 좌표값으로 인지하여 결과로 반환할 answer에 담습니다. y좌표도 마찬가지로 구하였고 테스트 결과 통과되었음을 확인하였습니다. 

 

하지만 시간이 너무 오래걸리는 것 같네요 filter에... Set에.... 성능을 향상할 방법이 없을까 확인해보니 비트연산자를 활용하는 방법이 있었습니다.

 

 

방법2 - XOR 비트연산자로 중복이 아닌 수를 구하여 반환

function solution(v) {
    let answer = [];
    answer.push(v[0][0]^v[1][0]^v[2][0]);
    answer.push(v[0][1]^v[1][1]^v[2][1]);
    
    return answer;
}

 

오... 속도 차이가 2배 이상 나는 것을 확인할 수 있었습니다. 앞으로 비트연산자와 친숙해져야겠습니다 ㅎㅎㅎ

728x90

댓글