본문 바로가기
프로그래밍/알고리즘

[카카오 데모테스트] 직사각형의 좌표 구하기

by 동네로봇 2019. 8. 26.

2020년 카카오 코딩테스트를 준비할 겸, 프로그래머스에 있던 데모 테스트를 풀어보았다.

검색해보면 똑같은 문제를 풀이해놓은 블로그가 많은 것을 봐서, 매년 똑같이 제공하는 연습문제인 것 같다.

해설을 보면 금방 풀 수 있겠지만 그래도 스스로 풀어보기로 결정. 

 

12시부터 대략 3시간 쯤 걸렸다ㅎㅎ

쉬운 문제인 것 같은데 처음 풀어보는 코딩테스트에 당황했음

코딩테스트를 많이 연습해봐야겠다고 느꼈다.

 

처음엔 각 변이 평행하다는 것을 보지 못해 직사각형 변을 구하는 공식까지 찾아가며 헤매었다. (문제를 꼼꼼히 읽도록 하자!!)

그렇게 계속 헤매다가 결국 각각의 배열에 x좌표와 y좌표가 중복되지 않는 값이 구하는 좌표 값이라는 규칙을 발견함!

 

아래는 문제와 내가 풀이한 코드이다. 

찾아보니 xor로 푸는 방법도 있던데 2줄이면 끝난다니 대단쓰


 

문제 설명

직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요. 단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.

 

제한사항

  • v는 세 점의 좌표가 들어있는 2차원 배열입니다.
  • v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
  • 좌표값은 1 이상 10억 이하의 자연수입니다.
  • 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.

입출력 예

vresult

[[1, 4], [3, 4], [3, 10]] [1, 10]
[[1, 1], [2, 2], [1, 2]] [2, 1]

입출력 예 설명

입출력 예 #1
세 점이 [1, 4], [3, 4], [3, 10] 위치에 있을 때, [1, 10]에 점이 위치하면 직사각형이 됩니다.

입출력 예 #2
세 점이 [1, 1], [2, 2], [1, 2] 위치에 있을 때, [2, 1]에 점이 위치하면 직사각형이 됩니다.

 


class Solution { 
    public int[] solution(int[][] v) { 
        int[] answer = new int[2]; 
         
        answer[0]=v[0][0]; 
        answer[1]=v[0][1]; 
         
        for(int i=1;i<v.length;i++) { 
         if(v[0][0]==v[i][0]) { 
         	answer[0]=v[v.length-i][0]; 
         } 
         if(v[0][1]==v[i][1]) { 
         	answer[1]=v[v.length-i][1]; 
         } 
        } 
        return answer; 
    } 
}

 

해설 

각 배열의 중복되지 않는 x좌표값과 y좌표값이 구하는 좌표 값이므로 일단 answer의 x와 y을 v[0]의 값으로 설정해놓는다.

for문과 if문을 사용하여 v[0][0]과 겹치는 값이 있다면 겹치지 않는 x값을 answer에 넣어준다.

y값도 마찬가지로 처리한다.

 

만약 문제에서 주어진 변이 평행하지 않았다면 엄청 복잡했겠지만, 그렇지 않아서 쉽게 풀 수 있었다. 

(정말 초보적인 코드겠지만 누군가에게는 도움이 되길 바라며.. ㅎㅎ)

 

그래도 스스로 풀어서 기분이 좋다!! 끝!! :))