[Java] 백준 9063번 - 대지

2023. 7. 1. 16:47·백준

문제 링크 : 백준 9063번 대지 - 자바

 

옥구슬의 여러 지점이 있을 때, 가장 크고작은 x, y를 찾아서 넓이를 계산하면 되는 문제이다.

예시로 살펴보자면 아래와 같다.

동 : x좌표가 제일 큰 것

서 : x좌표가 제일 작은 것

남 : y좌표가 제일 작은 것

북 : y좌표가 제일 큰 것

 

따라서, 좌표들을 입력받은 후 가장 크고작은 x, y를 찾아주면 된다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class P9063 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        List<Point> list = new ArrayList<>(); // 입력받은 좌표들의 목록
        for (int i = 0; i < N; i++) {
            int[] xy = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            list.add(new Point(xy[0], xy[1])); // 좌표 객체를 만들어 목록에 추가
        }
        if (list.size() <= 1) // 지점이 1개라면 넓이는 0, 2개 이상이어야 직사각형을 만들 수 있음
            System.out.println(0);
        else {
//            주의! min, max값을 0으로 설정해주면 좌표가 음수일 경우 계산값이 올바르지 않으므로 주의해야 함.
            int east = list.get(0).getX();
            int west = list.get(0).getX();
            int south = list.get(0).getY();
            int north = list.get(0).getY();
            for (Point p : list){
                int x = p.getX();
                int y = p.getY();
//                동 : x좌표가 제일 큰 것
//                서 : x좌표가 제일 작은 것
//                남 : y좌표가 제일 작은 것
//                북 : y좌표가 제일 큰 것
                if (x > east) east = x;
                if (x < west) west = x;
                if (y < south) south = y;
                if (y > north) north = y;
            }
            System.out.println((east - west) * (north - south));
        }
    }
}

class Point {
    private final int x;
    private final int y;
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return this.x;
    }

    public int getY() {
        return this.y;
    }
}

주의할 점 : min, max값을 0으로 설정해주면 좌표가 음수일 경우 계산값이 올바르지 않으므로 주의해야 한다.

개선할 점 : 가독성을 위해 객체를 생성하여 구현하였지만, x의 목록과 y의 목록 중 min, max값만 구하면 되므로 더 간단하게 구현해줄 수 있다. 또는 x와 y의 각 min max를 입력의 범위인 -10000, 10000으로 설정한 후 각 지점을 입력받을 때 min max를 비교한다면 더욱 더 간단해질 수 있다.

'백준' 카테고리의 다른 글

[Java] 백준 5073번 - 삼각형과 세 변  (0) 2023.07.01
[Java] 백준 10101번 - 삼각형 외우기  (0) 2023.07.01
[Java] 백준 11005번 - 진법 변환 2  (0) 2023.05.06
[Java] 백준 2338번 - 긴자리 계산  (0) 2023.05.06
[Java] 백준 1271번 - 엄청난 부자2  (0) 2023.05.06
'백준' 카테고리의 다른 글
  • [Java] 백준 5073번 - 삼각형과 세 변
  • [Java] 백준 10101번 - 삼각형 외우기
  • [Java] 백준 11005번 - 진법 변환 2
  • [Java] 백준 2338번 - 긴자리 계산
효재감자
효재감자
  • 효재감자
    효재감자의 우당탕탕 개발일지
    효재감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (73)
      • 아무거나 (3)
      • 백준 (44)
      • 알고리즘 (4)
      • 자바 (1)
      • 리눅스(우분투) 및 클라우드 (2)
      • 스프링 (14)
        • 스프링 시큐리티 인 액션 (도서 정리) (5)
      • 플러터(Dart) (0)
  • 블로그 메뉴

    • 홈
    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
효재감자
[Java] 백준 9063번 - 대지
상단으로

티스토리툴바