[프로그래머스 Lv1] 최소직사각형(python)
문제
https://programmers.co.kr/learn/courses/30/lessons/86491
나의 코드 (힌트 참조)
"""
1. 아이디어
명함을 세울수도, 눕힐수도 있기 때문에 가로, 세로는 언제든지 바뀔 수 있다.
그렇기 때문에 가로, 세로 중 한개를 임의로 정해서 한 곳에는 최댓값을 한 곳에는 최솟값을 집어 넣으면
그게 지갑안에 명함을 모두 집어넣을 수 있는 크기중에 최소 넓이의 지갑이 된다.
2. 시간복잡도
반복문 내에서는 비교 연산자 밖에 없기 때문에 O(n)이다.
"""
def solution(sizes):
max_w, max_h = 0, 0
for i in range(len(sizes)):
if sizes[i][0] < sizes[i][1]:
sizes[i][0], sizes[i][1] = sizes[i][1], sizes[i][0]
for w, h in sizes:
if w > max_w:
max_w = w
if h > max_h:
max_h = h
return max_w * max_h
다른 사람의 코드
"""
숏코딩 중에 가장 직관적이면서 깔끔한거 같다.
sizes를 순회하면서 최댓값의 최댓값, 최솟값의 최댓값을 구하면 해결 된다.
"""
def solution(sizes):
return max(max(x) for x in sizes) * max(min(x) for x in sizes)
느낀점
"""
1. 아이디어
명함을 세울수도, 눕힐수도 있기 때문에 가로, 세로는 언제든지 바뀔 수 있다.
그렇기 때문에 가로, 세로 중 한개를 임의로 정해서 한 곳에는 최댓값을 한 곳에는 최솟값을 집어 넣으면
그게 지갑안에 명함을 모두 집어넣을 수 있는 크기중에 최소 넓이의 지갑이 된다.
2. 시간복잡도
반복문 내에서는 비교 연산자 밖에 없기 때문에 O(n)이다.
"""
def solution(sizes):
max_w, max_h = 0, 0
for i in range(len(sizes)):
if sizes[i][0] < sizes[i][1]:
sizes[i][0], sizes[i][1] = sizes[i][1], sizes[i][0]
for w, h in sizes:
if w > max_w:
max_w = w
if h > max_h:
max_h = h
return max_w * max_h
"""
숏코딩 중에 가장 직관적이면서 깔끔한거 같다.
sizes를 순회하면서 최댓값의 최댓값, 최솟값의 최댓값을 구하면 해결 된다.
"""
def solution(sizes):
return max(max(x) for x in sizes) * max(min(x) for x in sizes)
느낀점
sizes의 범위가 1이상 10000이하 이기 때문에 완전탐색으로 풀기에는 무리가 있다.
알고리즘 보단 아이디어가 중요한 문제이다.
Author And Source
이 문제에 관하여([프로그래머스 Lv1] 최소직사각형(python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tyjk8997/프로그래머스-Lv1-최소직사각형저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)