Algorithm/Baekjoon
[백준 알고리즘][자바] 3009번 : 네 번째 점
hyunipad
2021. 10. 17. 16:18
반응형
https://www.acmicpc.net/problem/3009
세 점이 입력으로 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 문제입니다.
위의 그림을 보시면 모든 직사각형은 크기와 위치만 달라질 뿐 위의 형태를 가지게 됩니다.
그리고 아래의 특징이 있습니다.
- 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();
}
}
열심히 하다보면 더 깔끔하고 효율적인 코드를 짜는 날이 오겠죠?
반응형