본문으로 바로가기

programmers. 직사각형 만들기

category Algorithm/문제 2020. 12. 16. 22:19

문제

입출력 예

풀이

처음에 고민고민하다가 각 변은 평행하다는 것에서 힌트를 얻었다

주어진 세 좌표가 (1,4) (3,4) (3,10) 일 때 답은 1, 10인데

x좌표만 모아놓고 보면 [1,3,3]

y좌표만 모아놓고 보면 [4,4,10]

x,y좌표 각각 짝을 찾아주면 직사각형을 만들 수 있으니 짝이 없는 놈을 구하면 되는 것

바로 구현에 들어갔다

1st

const v = [[1, 4], [3, 4], [3, 10]];
const xStack = {};
const yStack = {};

const answer = [];

for(let i=0; i<v.length;i++){
    const x = v[i][0];
    const y = v[i][1];
    xStack[x] = xStack[x] ? xStack[x]+1 : 1;
    yStack[y] = yStack[y] ? yStack[y]+1 : 1;
}

for(let key in xStack){
    if(xStack[key] === 1) answer.push(Number(key));
}
for(let key in yStack){
    if(yStack[key] === 1) answer.push(Number(key));
}

배열에 담아놓고 스택처럼 쓰면될 것 같아서 스택이라고 선언했으나 코드를 짜다보니 배열보단 객체에 담아놓고 키와 밸류로 접근하는 것이 편하고 가독성이 좋을 것 같아서 그렇게 풀었다

스스로 짠 코드에 만족해서 남들과 비교하려고 검색해 봤는데...

비트연산자로 두 줄만에 풀어버리는 걸 보고 너무 부끄러웠다

2st

const v = [[1, 4], [3, 4], [3, 10]];

answer.push(v[0][0]^v[1][0]^v[2][0]);
answer.push(v[0][1]^v[1][1]^v[2][1]);

끝..

'Algorithm > 문제' 카테고리의 다른 글

baekjoon. 수 정렬하기 3  (0) 2021.01.01
baekjoon. 수 정렬하기 2  (0) 2020.12.30
baekjoon. 분해합  (0) 2020.12.29
baekjoon. 하노이 탑 이동 순서  (0) 2020.12.20
Recursion - blob 구하기  (0) 2020.12.07