본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 3009번 : 네 번째 점

by hyunipad 2021. 10. 17.
반응형

https://www.acmicpc.net/problem/3009

 

3009번: 네 번째 점

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

www.acmicpc.net

세 점이 입력으로 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 문제입니다.

위의 그림을 보시면 모든 직사각형은 크기와 위치만 달라질 뿐 위의 형태를 가지게 됩니다.

그리고 아래의 특징이 있습니다.

  • x축, y축마다 각각 두 개의 숫자가 존재한다.
  • 각각의 숫자들은 2번씩 쓰인다.

위의 특징들은 문제에서 제시한 조건 "축에 평행한" 이기 때문에 생기는 특징입니다.

조건들을 이용하여 문제에서 제시한 예제 입력을 보겠습니다.

x축의 숫자 5와 7 y축에 숫자 5와 7

5는 두번씩 다쓰였지만 7이 사용되지 않아서 네 번째 점은 (7, 7)입니다.

x축의 숫자 30과 10 y축에 숫자 20과 10

x축에서 30이 한번만한 번만 쓰였고 y축에서는 10이 한 번만 쓰였기 때문에 네 번째 점은 (30, 10)입니다.

위의 방식을 참고하여 프로그램을 짜겠습니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {

// 		백준 알고리즘 3009번
//		세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
//		세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		String[] x = {"", ""};
		String[] y = {"", ""};
		
		for (int T = 0; T < 3; T++) {	
			String[] xy_array = br.readLine().split(" ");
			String X = xy_array[0];
			String Y = xy_array[1];
			// 1. 비어있으면 넣고
			// 2. 안비어있는데 같으면 없애고
			for(int i = 0; i < 2; i++) {
				if(x[i] == "") {
					x[i] = X;
					break;
				}else if(x[i] != "" & x[i].equals(X)) {
					x[i] = "";
					break;
				}
			}
			for(int i = 0; i < 2; i++) {
				if(y[i] == "") {
					y[i] = Y;
					break;
				}else if(y[i] != "" && y[i].equals(Y)) {
					y[i] = "";
					break;
				}
			}
		}
		
		String X = x[0] + x[1];
		String Y = y[0] + y[1];
		bw.write(X + " " + Y);

		br.close();
		bw.flush();
		bw.close();
	}

}

열심히 하다보면 더 깔끔하고 효율적인 코드를 짜는 날이 오겠죠?

반응형

댓글