본문 바로가기

문제 풀이/Baekjoon

[백준] B3 3009번 네번째 점 (JAVA)

문제 출처 - Baekjoon Online Judge

문제는 여기

 

3009번: 네 번째 점

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

www.acmicpc.net

[문제] 

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

[입력]

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

[출력]

직사각형의 네 번째 점의 좌표를 출력한다.

 

 


[풀이]

1. 총 3개의 좌표가 주어진다면 x의 좌표 3개 중 1번만 사용된 좌표, y의 좌표 3개 중 1번만 사용된 좌표가 4번째 좌표임을 이용해서 문제를 해결하였다.

[접근]

1. 배열에 값을 다 받아서 for문을 돌면서 1번만 사용된 값을 찾으려고 생각했다.

2. 하지만 색다르게 HashSet을 이용해서 이미 입력이 되었다면 해당 값을 제거해주고 없다면 추가하는 식으로 해결하였다.

3. 결과 출력을 할 때, 그냥 set의 toString()을 사용하면 []에 포함되어 값이 출력된다.

4. 이를 해결해주기 위해 Iterator를 사용하여 출력해주었다.

5. HashSet의 장점인 속도를 살렸다.

[코드]

package BOJ_bronze;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Iterator;
import java.util.StringTokenizer;

public class Main_B3_3009 {
	static HashSet<Integer> x; 
	static HashSet<Integer> y; 

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		x = new HashSet<>(); // x의 좌표값을 담기 위한 hashset
		y = new HashSet<>(); // y의 좌표값을 담기 위한 hashset
		
		for (int i = 0; i < 3; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			
			// x의 값 임의변수 n1, y의 값 임의변수 n2
			int n1 = Integer.parseInt(st.nextToken());
			int n2 = Integer.parseInt(st.nextToken());
			
			// 이미 있다면 제거해주고 없다면 추가
			if (x.contains(n1)) {
				x.remove(n1);
			}
			else {
				x.add(n1);
			}
			
			if (y.contains(n2)) {
				y.remove(n2);
			}
			else {
				y.add(n2);
			}
		}
		// 안에 있는 값을 출력하기 위한 Iterator
		Iterator<Integer> xiter = x.iterator();
		Iterator<Integer> yiter = y.iterator();
        while(xiter.hasNext()) {
            System.out.print(xiter.next() +" ");
        }
        while(yiter.hasNext()) {
            System.out.println(yiter.next());
        }
	}
}