on
Baekjoon3009: 네 번째 점
Baekjoon3009: 네 번째 점
문제
세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
입력
세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.
출력
직사각형의 네 번째 점의 좌표를 출력한다.
추상화
일반 사각형의 나머지 한 점을 구하는 것은 여러가지 답이 나올 수 있을 것이다
하지만 문제의 제한조건은 너무 명확했다.
1) 직사각형일 것
2) 축에 평행하다
이 두개의 조건으로 인해 다음 조건이 성립한다
3) 각 x, y좌표는 각각 두번씩 사용된다
직사각형은 왼쪽x, 오른쪽x, 아래y, 위y 총 4개 종류의 좌표로 구성되며 각각 2번씩 사용된다
입력값은 이중에서 6개를 알려준다. 사용되지 않은 좌표값을 입력하기만 하면된다
확장성
if문을 통해 크기가 3인 배열을 만들고 경우의 수를 나누어 각각을 비교할 수 있다
→ 1과 2가 같은 경우, 2와 3이 같은 경우, 1과 3이 같은 경우
하지만 위 방식은 이 문제에만 한정된다. 확장성을 위한 배열 논리문 으로 풀어보았다
1) 크기가 3인 배열을 만든다: 하나는 논리, 다른 하나는 숫자이다. x, y에 대하여 각각 만든다
2) 값을 집어넣고 반복문을 통해 현재 index가 아닌 다른 index의 값과 겹치게 되면 둘 모두의 index를 논리배열에 표기
3) 표기되지 않은 값을 찾아 출력한다
import java.io.*; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; int[] x = new int[3]; int[] y = new int[3]; boolean[] overlapX = new boolean[3]; boolean[] overlapY = new boolean[3]; int X=0,Y=0; //출력할 값 for(int i =0; i<3; i++) { st = new StringTokenizer(br.readLine(), " "); x[i] = Integer.parseInt(st.nextToken()); y[i] = Integer.parseInt(st.nextToken()); } for(int i =0; i<3;i++) { for(int j =0; j<3; j++) { if(i != j) { // 자기와 다른 index의 값과 같을 때, 해당 값들을 중복으로 표시해준다 if(x[i]==x[j]) { overlapX[i] = true; overlapX[j] = true; } if(y[i]==y[j]) { overlapY[i] = true; overlapY[j] = true; } } } } for(int i =0; i<3; i++) { if(overlapX[i] == false) { X = x[i]; } if(overlapY[i] == false) { Y = y[i]; } //중복이 아닌 변수를 골라서 입력한다 } System.out.print(X+" "+Y); } }
from http://devyoseph.tistory.com/66 by ccl(A) rewrite - 2021-10-14 06:28:20