안녕하세요, 성조입니다.
이번 포스팅은 자바 11 버전으로 풀이됐습니다.
문제 출처
https://www.acmicpc.net/problem/3009
3009번: 네 번째 점
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
www.acmicpc.net
문제
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
입력
세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.
출력
직사각형의 네 번째 점의 좌표를 출력한다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int x[] = new int[4];
int y[] = new int[4];
int dx = 0;
int dy = 0;
for(int i=0; i<3; i++) {
String text[] = br.readLine().split(" ");
x[i] = Integer.parseInt(text[0]);
y[i] = Integer.parseInt(text[1]);
}
// x
if(x[1] == x[2]) {
dx = x[0];
}else if(x[0] == x[1]) {
dx = x[2];
}else {
dx = x[1];
}
// y
if(y[1] == y[2]) {
dy = y[0];
}else if(y[0] == y[1]) {
dy = y[2];
}else {
dy = y[1];
}
System.out.println(dx + " " + dy);
}catch(IOException e) {
System.out.println("error");
}
}
}
풀이
사실 이 문제는 단순 구현의 문제이다.
배열로 문제를 풀이하려 한다.
입력의 조건에 '1000보다 작거나 같은 정수이다.'라는 조건이 있다. 이 조건으로 인하여 배열 할당은 4를 초과할 수 없다. (1,0,0,0)
반복문을 통해서 3개의 값을 입력을 입력받고, 그 값을 4개의 값으로 비교하면 된다.
간단한 풀이는 위와 같으며, 원래 문제의 의도는 4개의 크기를 할당받는다 하더라도 if문을 이렇게 많이 사용하는 것이 아닌 다른 연산자를 통해서 조건 확인 횟수를 줄이는 것이 핵심이었을 것이다.
이번 문제는 며칠 전에 5분안에 풀겠지 하고 시도했다가 갑자기 접근 방법을 어떻게 진행해야 할 것인지 생각 안났던 문제입니다. 조금 더 기본기를 탄탄하게 다져야 할 필요성을 느끼게 된 문제입니다. 더 고효율 속도를 낼 수 있도록 코딩할 수 있으나, 단순하게 접근하는 방법을 고려하고 보니 위와 같은 풀이가 나와서 정말 단순한 풀이로 남기려 합니다.
오타나 이해가 안 가는 부분이 있다면 언제든지 댓글로 얘기해 주시면 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Java' 카테고리의 다른 글
[백준 - 1094][Java] 막대기 (0) | 2023.01.14 |
---|---|
[백준 - 1427][Java] 소트인사이드 (0) | 2023.01.11 |
[백준 - 1312][Java] 소수 (0) | 2023.01.08 |
[백준 - 1032][Java] 명령 프롬프트 (0) | 2023.01.07 |
[백준 - 4673][Java] 셀프 넘버 (0) | 2023.01.02 |