오랑우탄의 반란

프로그래머스 | 최소직사각형 (Python3) 본문

PYTHON/프로그래머스

프로그래머스 | 최소직사각형 (Python3)

5&2 2024. 7. 11. 16:06
반응형

 

오늘도 오랑이는 문제를 풉니다.

 

최소직사각형

 

풀이 과정

왜인지 모르겠으나 문제를 복잡하게 생각해서 리스트 조작을 두번씩이나 하면서 복잡하게 풀어버렸습니다.

 

거대해진 코드..

def solution(sizes):
    w = []
    h = []
    for i in range(len(sizes)):
        w.append(max(sizes[i][0], sizes[i][1]))
        h.append(min(sizes[i][0], sizes[i][1]))
        w.sort(reverse = True)
        h.sort(reverse = True)
    return w[0]*h[0]

 

하지만 이 문제는 max 함수의 속성을 잘 이해하고 있으면 한 줄로 세상 간단하게 풀 수 있는 정말 파이썬다운 문제였습니다. 

 

max() 함수 

max는 object 와 iterable 을 인수로 가질 수 있습니다. 

각각 예시로 살펴보겠습니다. 

 

max 인수의 type 이 동일한 범위 내에서 계산이 가능합니다. 

var1 = 2
var2 = 8
var3 = 5
max_val = max(var1, var2, var3)
print(max_val)
# --> 8

var1 = "apple"
var2 = "banana"
var3 = "orange"
max_val = max(var1, var2, var3)
print(max_val)
# --> orange

 

특수문자 < 숫자 < 대문자 < 소문자 < 한글 순으로 큰 값을 가지며 max 함수는 NULL 값을 무시합니다. 

리스트를 가진 변수에 대해서도 계산이 가능하지만, 리스트를 바로 max 안에 넣는 것은 불가능합니다. 

list = [2, 13, 7]
max_value = max(list)
print(max_value)
# ---> 7

string = "HelloWorld"
max_val = max(string)
print(max_val)
# ---> W

 

위 개념을 적용했을 때 max 안에 iterable i 를 바로 넣어도 리스트 안의 리스트에 대해 적용이 된다는 사실!

처음 코드를 간단하게 줄이면 이렇습니다. 

def solution(sizes):
    w = []
    h = []
    for i in sizes:
        w.append(max(i))
        h.append(min(i))
    return max(w)*max(h)

 

max의 속성을 완벽히 이해했다면 아래와 같은 한줄코딩도 가능하겠지요? 

 

최종 코드

def solution(sizes):
    return max(max(i) for i in sizes)*max(min(j) for j in sizes)

 

파이썬 기본기를 탄탄하게 해야겠습니다.

 

 

 

오랑우탄이 영어를 하고 오랑이가 코드마스터가 되는 그날까지~

 

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형