2026. 5. 2. 17:09ㆍPS 풀이/SW Expert Academy
문제
https://swexpertacademy.com/main/code/problem/problemDetail.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
요약
- N개의 점 중 3점을 골라, 두 변이 X, Y 축에 평행하는 삼각형의 최대 넓이를 구하자.
풀이 과정
삼각형의 조건과 좌표 관계
문제에서 요구하는 삼각형은 두 변이 각각 X, Y 축에 평행해야 합니다. 이 조건을 만족하려면 해당 삼각형은 직각삼각형이어야 하며, 세 꼭짓점의 좌표는 다음과 같은 관계를 가집니다.
- 직각을 이루는 꼭짓점: ($x_1$, $y_1$)
- $x$축에 평행한 변을 만드는 점: ($x_2$, $y_1$)
- $y$축에 평행한 변을 만드는 점: ($x_1$, $y_2$)
전처리 - 중심점과 같은 선상의 좌표 선택
N개의 점을 하나씩 "직각을 이루는 꼭짓점(pivot)"으로 가정했을 때, 최대 넓이를 얻으려면 중심점과 같은 선상에 있는 점들 중 가장 멀리 떨어진 점을 선택해야 합니다.
이를 위해 각 좌표출별로 최소/최대 좌표를 미리 저장해두면 매번 전체 좌표를 순회할 필요가 없습니다.
def solve():
y_bounds_by_x = defaultdict(lambda: [0, 0])
x_bounds_by_y = defaultdict(lambda: [0, 0])
for x, y in points:
y_bounds_by_x[x][MAX] = max(y_bounds_by_x[x][MAX], y)
y_bounds_by_x[x][MIN] = min(y_bounds_by_x[x][MIN], y)
x_bounds_by_y[y][MAX] = max(x_bounds_by_y[y][MAX], x)
x_bounds_by_y[y][MIN] = min(x_bounds_by_y[y][MIN], x)
방금 구한 양수/음수 좌표와 pivot에 대해 절대값이 가장 큰 거리를 찾으면 됩니다.
max_area = 0
for x, y in points:
min_x, max_x = x_bounds_by_y[y]
min_y, max_y = y_bounds_by_x[x]
width = max(abs(x - min_x), abs(x - max_x))
height = max(abs(y - min_y), abs(y - max_y))
max_area = max(max_area, width * height)
return max_area
문제에서 삼각형 넓이에 2를 곱한 값을 요구하므로, 밑변과 높이를 곱한 값을 그대로 출력하면 됩니다.
성능 분석
- 시간 복잡도: $O(N)$
- 제출결과: Pass / 79ms / 59,008kb
소스코드
https://github.com/rogi-rogi/problem-solving/blob/main/SW%20Expert%20Academy/D3/26502.py
problem-solving/SW Expert Academy/D3/26502.py at main · rogi-rogi/problem-solving
Daily Problem Solving Challenges. Contribute to rogi-rogi/problem-solving development by creating an account on GitHub.
github.com
'PS 풀이 > SW Expert Academy' 카테고리의 다른 글
| [SWEA 26009] 곱의 합 [Python] (0) | 2026.05.05 |
|---|---|
| [SWEA 26389] 여행 [Python] (0) | 2026.05.03 |
| [SWEA 19004] 점프 놀이 [C/C++] (2) | 2024.01.05 |
| [SWEA 19003] 팰린드롬 문제 [C/C++] (0) | 2024.01.02 |
| [SWEA 19113] 식료품 가게 [C/C++] (0) | 2024.01.01 |