문제 설명
2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.
제한사항
- dots의 길이 = 4
- dots의 원소의 길이 = 2
- -256 < dots[i]의 원소 < 256
- 잘못된 입력은 주어지지 않습니다.
입출력 예
dots | result |
[[1, 1], [2, 1], [2, 2], [1, 2]] | 1 |
[[-1, -1], [1, 1], [1, -1], [-1, 1]] | 4 |
class Solution {
public int solution(int[][] dots) {
int answer = 0;
int maxX = Integer.MIN_VALUE;
int maxY = Integer.MIN_VALUE;
int minX = Integer.MAX_VALUE;
int minY = Integer.MAX_VALUE;
for (int i = 0; i < dots.length; i++) {
if (maxX < dots[i][0]) {
maxX = dots[i][0];
}
if (maxY < dots[i][1]) {
maxY = dots[i][1];
}
if (minX > dots[i][0]) {
minX = dots[i][0];
}
if (minY > dots[i][1]) {
minY = dots[i][1];
}
}
int x = maxX - minX;
int y = maxY - minY;
answer = x * y;
return answer;
}
}
변수 maxX, maxY, minX, minY를 생성합니다. 각각 X에서 큰 값, Y에서 큰 값, X에서 작은 값, Y에서 작은 값을 담을 변수입니다. 각각 변수를 갱신해나가면서 값을 할당할 것이기 때문에 Integer 클래스의 메소드를 이용했습니다. 문제에서는 제한사항에 원소를 -256부터 256까지 범위로 지정했기 때문에 이 두 수로 지정해도 됩니다. 그러나 보편적인 상황에서는 메소드를 이용하는 것이 편리할 것으로 보입니다.
for문이 dots의 길이만큼 순회합니다.
첫 번째 if문에서 maxX가 dots[i][0]번째 원소보다 크다면 maxX를 dots[i][0]번째 원소로 갱신합니다.
두 번째 if문에서 maxY가 dots[i][1]번째 원소보다 크다면 maxY를 dots[i][1]번째 원소로 갱신합니다.
첫 번째 if문에서 minX가 dots[i][0]번째 원소보다 작다면 minX를 dots[i][0]번째 원소로 갱신합니다.
첫 번째 if문에서 minY가 dots[i][1]번째 원소보다 작다면 minY를 dots[i][1]번째 원소로 갱신합니다.
위 과정을 거쳐 모든 변수의 값이 조건에 해당하는 값으로 갱신됩니다.
변수 x, 즉 x의 길이는 maxX에서 minX를 뺀 값입니다. 변수 y, 즉 y의 길이는 maxY에서 minY를 뺀 값입니다.
사각형의 넓이는 가로 * 세로이므로 x와 y를 곱하여 answer에 할당합니다.
'프로그래머스 > Lv. 0(코딩테스트 입문)' 카테고리의 다른 글
[프로그래머스 코딩테스트] 유한소수 판별하기(Java) (0) | 2023.06.24 |
---|---|
[프로그래머스 코딩테스트] 진료 순서 정하기(Java) (0) | 2023.06.12 |
[프로그래머스 코딩테스트] 저주의 숫자 3(Java) (0) | 2023.06.05 |
[프로그래머스 코딩테스트] 모스부호 (1)(Java) (0) | 2023.06.04 |
[프로그래머스 코딩테스트] 공 던지기(Java) (0) | 2023.06.02 |