본문 바로가기
백준

[백준] 3009번 : 네 번째 점 – JAVA [자바]

by Hongwoo 2022. 8. 14.
반응형

https://www.acmicpc.net/problem/3009

 

3009번: 네 번째 점

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 3009번 네 번째 점은 브론즈 3 난이도의 구현 및 기하학 문제이다. 이 문제에서는 세 점의 좌표가 주어진다. 그리고 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 출력하면 된다.

 

이 문제는 간단하다. 3개의 점이 주어진다. 똑같은 x 좌표 2개, 다른 x 좌표 1개가 주어진다. y 좌표도 마찬가지다. 이때 1번만 나온 x좌표와 y 좌표를 각각 출력해주기만 하면 된다.

 

이 문제는 x와 y 좌표의 count를 세야 하기 때문에 HashMap을 이용하도록 하겠다. HashMap의 Key는 좌표를 저장하고, Value로는 그리고 좌표를 입력받을 때 x 맵에 getOrDeafult 함수를 이용해서 추가해준다. getOrDefault 함수는 찾는 키가 맵에 있으면 찾는 키의 값을 반환하고 없으면 기본 값을 반환하는 함수이다. 즉, mapX.put(x, mapX.getOrDefault(x, 0) + 1)를 해주는 것이다. 따라서 x 좌표가 한 번만 나온 좌표면 맵에 (x, 1)로 저장되어 있고 두 번 입력받은 좌표이면 맵에 (x, 2)로 저장되어 있다. y 좌표들도 똑같이 해준다.

 

이렇게 모든 점들을 입력받고 나면 맵에는 (좌표 1, 2)와 (좌표 1, 1)이 저장되어 있을 것이다. 따라서 좌표의 개수가 1인 것들만 출력해주면 된다.

 

자세한 코드는 아래에 있는 코드를 참고하면 되겠다.

 


  • 코드

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Map<Integer, Integer> x = new HashMap<>();  //x 좌표를 저장하는 맵
        Map<Integer, Integer> y = new HashMap<>();  //y 좌표를 저장하는 맵
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= 3; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            x.put(a, x.getOrDefault(a, 0) + 1);
            y.put(b, y.getOrDefault(b, 0) + 1);
        }
        // x 맵에 한 번만 나온 x 좌표를 출력
        for (int i : x.keySet()) {
            if (x.get(i) == 1) sb.append(i + " ");
        }
        //y 맵에 한 번만 나온 y 좌표를 출력
        for (int i : y.keySet()) {
            if (y.get(i) == 1) sb.append(i);
        }
        System.out.print(sb);
    }
}

 

 

반응형

댓글