프로그래머스에서 코딩테스트를 진행하면 데모 테스트로 나오는 문제이다.
직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요. 단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.
- v는 세 점의 좌표가 들어있는 2차원 배열입니다.
- v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
- 좌표값은 1 이상 10억 이하의 자연수입니다.
- 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.
- v == [[1,4],[3,4],[3,10]] 일 때, result == [1,10]
- v == [[1,1],[2,2],[1,2]] 일 때, result == [2,10]
x좌표의 값과 y좌표의 값을 각각 찾아주는데
주어진 3개의 점 중 두개의 점이 같은 좌표를 가진다면 우리가 구하는 점의 좌표는 그 다른 하나의 점과 좌표가 같은 것이다.
이것을 x와 y에 적용하면 될 것이라 생각했다.
혹시 다른 풀이방법이 있는 분은 댓글 부탁드립니다...
import java.util.Scanner;
class retangle{
public static int[] solution(int[][] v){
//static 함수에서 호출당해야되므로 static형
int[] answer = new int[2];
//x축 찾기
if(v[0][0] == v[1][0]) answer[0] = v[2][0];
else if(v[0][0] == v[2][0]) answer[0] = v[1][0];
else answer[0] = v[0][0];
//y축 찾기
if(v[0][1] == v[1][1]) answer[1] = v[2][1];
else if(v[0][1] == v[2][1]) answer[1] = v[1][1];
else answer[1] = v[0][1];
return answer;
}
public static void main(String[] args) {
//static이어야 main mathod를 인식한다...
Scanner stdin = new Scanner(System.in);
int a;
int[][] point = new int[3][2];
for(int i =0;i<3;i++){
for(int j =0;j<2;j++){
a=stdin.nextInt();
point[i][j] = a;
}
}
int[] ans = solution(point);
System.out.println(ans[0] +","+ ans[1]); //배열의 각 요소를 따로 적어주지 않으면 배열의 주소를 출력한다
stdin.close();
}
}
쉬운 수학문제인데도 혹시나 더 좋은 방법이 있을까하고 고민을 좀 했다.
아무래도 내 생에 첫 코딩 문제여서 문제를 해결하는 감이 아직 없는 것 같다.
1일 1문제를 목표로 열심히 하자!