[백준 3009번 : 네 번째 점] java 풀이

Elmo·2022년 8월 4일
0

[백준] 알고리즘

목록 보기
24/42

🔔기하학1 - 네 번째 점

이 문제는 약간의 생각을 하게 만든 문제..
이런 문제를 풀 때는 노트나 아이패드에 그림을 그려보는 것이 좋다.

내가 문제에 접근한 방식을 정리하자면,

  • 우선 직사각형의 한 변을 a라고 정의하였다.
  • 입력받은 3개의 점을 x좌표 순서대로 먼저 정렬하고, x좌표가 같으면 y좌표 순서대로 정렬했다.
    참고링크 : "백준 11650번 좌표 정렬하기"
  • 좌표를 정렬해서 순서대로 1,2,3 번호를 붙이면 나올 수 있는 경우는 위에 그림과 같다.

    핵심은 가장 작은 1번 점은 왼쪽, 가장 큰 3번 점은 오른쪽에 무조건 존재한다. 형광색으로 표시한 2번 점은 보다시피 왼쪽 오른쪽을 넘나든다. 따라서 2번 점을 이용하여 조건문을 작성한다.

  • 2번 점이 왼쪽에 있으면 우리가 찾는 네 번째 점은 오른쪽에 존재한다. 이때 3번 점이 위에 있냐 아래에 있냐를 기준으로 네 번째 점의 위치를 정한다.
  • 마찬가지로 2번 점이 오른쪽에 있으면 찾는 좌표는 왼쪽에 존재하고, 1번 점이 위냐 아래냐를 기준으로 네 번째 점의 위치를 정한다.

🔑 java 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main{
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//좌표 3개 입력받기
		int point[][]= new int[3][2];
		for(int i=0; i<3; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine()," ");
			point[i][0]=Integer.parseInt(st.nextToken());
			point[i][1]=Integer.parseInt(st.nextToken());			
		}
		//먼저 x좌표 순서대로 정렬, x좌표가 같을 경우 y좌표 순서대로 정렬
		Arrays.sort(point,(e1,e2)->{
			if(e1[0]==e2[0])
				return e1[1]-e2[1];
			else
				return e1[0]-e2[0];
		});
		
		int position[]= new int[2]; //우리가 찾아야할 좌표
		if(point[1][0]==point[0][0]) { //두번째로 큰 좌표가 직사각형의 왼쪽에 있을경우
			position[0]=point[2][0];//찾는 좌표는 오른쪽에 있음
			if(point[2][1]==point[0][1]) //가장 큰 좌표가 오른쪽 아래 꼭짓점에 있을경우 
				position[1]=point[1][1];//찾는 좌표는 오른쪽 위 꼭짓점에 있음 
			else//가장 큰 좌표가 오른쪽 위 꼭짓점에 있을경우
				position[1]=point[0][1];//찾는 좌표는 오른쪽 아래 꼭짓점에 있음
			}
		else {//두번쨰로 큰 좌표가 직사각형의 오른쪽에 있을경우
			position[0]=point[0][0];//일단 찾는 좌표는 왼쪽에 있다
			if(point[0][1]==point[1][1])//가장 작은 좌표의 y값이 두번째로 큰 좌표와 같을경우
				position[1]=point[2][1];//찾는 좌표는 직사각형 왼쪽 위 꼭짓점에 있음
			else//가장 작은 좌표의 y값이 가장 큰 좌표와 같을 경우
				position[1]=point[1][1];//찾는 좌표는 직사각형 왼쪽 아래 꼭짓점에 있음
		}
		System.out.print(position[0]+" "+position[1]);//결과 출력
		br.close();
	}
}

기하학 문제 넘 재밌당

profile
엘모는 즐거워

0개의 댓글