728x90
반응형
SMALL
문제 설명
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 |
입출력 예 설명
입출력 예 #1
- 좌표 [[1, 1], [2, 1], [2, 2], [1, 2]] 를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 1, 1이므로 직사각형의 넓이는 1 x 1 = 1입니다.
입출력 예 #2
- 좌표 [[-1, -1], [1, 1], [1, -1], [-1, 1]]를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 2, 2이므로 직사각형의 넓이는 2 x 2 = 4입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120860
직사각형을 구성하는 점 → {x좌표, y좌표} 으로 표현됨
x * y
x의 길이와 y의 길이를 구해야하는데 각 변의 길이는 각 좌표의 큰값에서 가장 작은 값을 빼서 구하기 → 1차 시도
Math.*abs = 주어진 숫자에 절대값 반환 → 직사각형의 넓이에 음수가 들어가면 안되기 때문에 사용*
if(x != dots[i][0]) = Math.abs(x - dots[i][0]);
^
return answer;
에러 발생 : 절대값을 구하는 메서드 앞에 임의의 값 선언 필요!
return answer; → answer을 선언하지 않아 쓸 수 없음
- x, y 임의의 값이 두개가 필요할거 같음
if(x != dots[i][0]) = Math.abs(x - dots[i][0]);
^
x * a 를 넣어주기 않았기 때문…ㅠ
int x = dots[0][0]; => dots[i][0]
int y = dots[0][1]; => dots[i][1]
테스트는 성공했는데, 제출 때 실패…!
class Solution {
public int solution(int[][] dots) {
int a = 0;
int b = 0;
int x = dots[0][0];
int y = dots[0][1];
for(int i = 1; i< dots.length; i++) {
if(x != dots[i][0]) a = Math.abs(x - dots[i][0]);
if(y != dots[i][0]) b = Math.abs(y - dots[i][0]);
}
return a * b;
}
}
최대값 최소값으로 구해보기
x중에서 가장 큰값 - x중에서 가장 작은 값 * y중에서 가장 큰값 - y중에서 가장 작은 값
x중에서 가장 큰값 - x중에서 가장 작은 값 => x의 길이
y중에서 가장 큰값 - y중에서 가장 작은 값 => y의 길이
class Solution {
public int solution(int[][] dots) {
int a = 0;
int b = 0;
for(int i = 1; i< dots.length; i++) {
int x = Math.max(sizes[i][0], size[i][1]);
int y = Math.min(sizes[i][0], size[i][1]);
}
a = Math.max(a, x);
b = Math.min(b, y);
return a * b;
}
}
정답
class Solution {
public int solution(int[][] dots) {
int minX = 256;
int minY = 256;
int maxX = -256;
int maxY = -256;
for(int i = 0; i < dots.length; i++){
if(dots[i][0] < minX){
minX = dots[i][0];
}
if(dots[i][1] < minY){
minY = dots[i][1];
}
}
for(int i = 0; i < dots.length; i++){
if(dots[i][0] > minX){
maxX = dots[i][0];
}
if(dots[i][1] > minY){
maxY = dots[i][1];
}
}
return (maxX - minX) * (maxY - minY);
}
}
728x90
반응형
LIST
'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글
저주의 숫자 3 (0) | 2023.03.12 |
---|---|
연속된 수의 합 (0) | 2023.03.11 |
숫자 찾기 (0) | 2023.02.26 |
문자열 정렬하기(2) (0) | 2023.02.25 |
OX퀴즈 (0) | 2023.02.23 |