본문 바로가기
코딩테스트/백준

[백준/java] 네 번째 점

by drCode 2021. 2. 1.
728x90
반응형

 

www.acmicpc.net/problem/3009

 

3009번: 네 번째 점

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

www.acmicpc.net

문제

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

입력

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

출력 

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

 

예제 입력 1 

30 20

10 10

10 20

 

예제 출력 1

30 10

 

※ 접근 방법

(1) 포인트 클래스를 만든다.(x, y)

(2) 포인트를 리스트에 담는다.

(3) x맵과 y맵을 만들고 값을 넣어준다.

(4) Iterator로 x, y값의 갯수를 새고 적은 것을 minX, minY값을 넣어준다.

(5) minX, minY를 출력한다.

 

package boj;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class NoFourPoint {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		List<Point> list = new ArrayList<>();
		for (int i = 0; i < 3; i++) {
			Point a = new Point(sc.nextInt(), sc.nextInt());
			list.add(a);
		}
		Map<Integer, Integer> lessX = new HashMap<>();
		Map<Integer, Integer> lessY = new HashMap<>();
		
		for (int i = 0; i < list.size(); i++) {
			Point temp = list.get(i);
			
			if(!lessX.containsKey(temp.x)) lessX.put(temp.x, 1);
			else lessX.replace(temp.x, lessX.get(temp.x) + 1);
			
			if(!lessY.containsKey(temp.y)) lessY.put(temp.y, 1);
			else lessY.replace(temp.y, lessY.get(temp.y) + 1);
		}
		
		Iterator<Integer> irX = lessX.keySet().iterator();
		int minX = 0; 
		while(irX.hasNext()) {
			int key = irX.next();
			if(minX == 0) minX = key;
			else {
				if(lessX.get(key) < lessX.get(minX)) minX = key;
			}
		}
		
		Iterator<Integer> irY = lessY.keySet().iterator();
		int minY = 0;
		while(irY.hasNext()) {
			int key = irY.next();
			if(minY == 0) minY = key;
			else {
				if(lessY.get(key) < lessY.get(minY)) minY = key;
			}
		}
		
		System.out.println(minX + " " + minY);
	}
}

class Point {
	int x;
	int y;
	
	Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
}
728x90
반응형

댓글