728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120860
내 풀이
def solution(dots):
# dots 배열의 가장 마지막 원소를 기준점으로 잡음
standard = dots.pop()
# 가장 마지막 원소가 빠진 dots 배열을 순회하며..
for x, y in dots:
# 기준점과 x좌표가 같은 좌표는 세로의 길이(y좌표의 차이)를 구함
if x == standard[0]:
length = abs(y-standard[1])
# 기준점과 y좌표가 같은 좌표는 가로의 길이(x좌표의 차이)를 구함
if y == standard[1]:
width = abs(x-standard[0])
return length * width
처음에는 원소의 자리가 고정되어 있는줄 알고, 단순히 abs(x1-x3) * abs(y1-y3)을 통해 풀려했다.
그러나, 원소의 자리가 고정되어 있지 않아서
하나의 기준점을 잡고 그 기준점을 바탕으로 x좌표가 같은 좌표는 세로의 길이를,
y좌표가 같은 좌표는 가로의 길이를 구하여 넓이를 구해보았다.
다른 사람 풀이
def solution(dots):
x = [dot[0] for dot in dots]
y = [dot[1] for dot in dots]
w = max(x) - min(x)
h = max(y) - min(y)
area = w*h
return area
위의 풀이는 x 리스트에 x 값의 좌표를 모두 넣고, y 리스트에는 y 값의 좌표들만 모두 넣는다.
그 후, x 리스트의 최댓값 - x 리스트의 최솟값 = 가로 길이
y 리스트의 최댓값 - y 리스트의 최솟값 = 세로 길이
와 같은 형식으로 넓이를 구한다.
이를 좀 짧게 쓰면 아래의 코드들과 같다.
# 위와 같은 코드
def solution(dots):
w = max(dots)[0] - min(dots)[0]
h = max(dots)[1] - min(dots)[1]
area = w*h
return area
def solution(dots):
return (max(dots)[0] - min(dots)[0])*(max(dots)[1] - min(dots)[1])
느낀점
나는 직사각형의 넓이를 구하라해서 단순히 좌표 자체에만 집중을 했는데,
다른 사람들의 풀이를 보니 매우 색달랐다.
4개의 좌표 중 x좌표의 최댓값과 최솟값을 알면 가로,
y좌표의 최댓값과 최솟값을 알면 세로의 길이를 구할 수 있다는 사실이 많이 색달랐다.
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 최댓값 만들기 (2) (0) | 2024.03.13 |
---|---|
[프로그래머스][PYTHON] Lv. 0 캐릭터의 좌표 (0) | 2024.03.12 |
[프로그래머스][PYTHON] Lv. 0 OX퀴즈 (0) | 2024.03.08 |
[프로그래머스][PYTHON] Lv. 0 문자열 계산하기 (0) | 2024.03.06 |
[프로그래머스][PYTHON] Lv. 0 가까운 수 (0) | 2024.03.03 |