max([w if w >= h else h for w, h in sizes])
[프로그래머스]86491번 : 최소직사각형
https://school.programmers.co.kr/learn/courses/30/lessons/86491
[python] 문제 풀이
def solution(sizes):
max_w,max_h=0,0
answer = 0
for w,h in sizes:
if w<h: #w<h이면
w,h=h,w #w값과 h값 교환
max_w = max(max_w,w) #max_w에 가장 큰 w값 넣기
max_h = max(max_h,h)
answer = max_w * max_h
return answer
명함을 뒤집어서 가로에 긴 변들을 모으고, 세로에 짧은 변끼리 모아서
모은 값들 중에 가장 큰 값들을 각각 변수에 저장
[추가] 리스트 컴프리 헨션
스터디원 풀이를 보니 반복문이나 조건문을 한줄로 간단하게 작성하여 가독성을 높인 풀이가 보임
리스트 컴프리헨션 이란?
- 리스트를 생성하는 효율적인 방법
- 반적인 for 루프와 조건문을 한 줄로 작성할 수 있어 코드가 더 간결해지고 가독성이 좋아짐
[표현식 for 요소 in 반복가능한객체 if 조건]
예시1) 기본 리스트 작성
num=[1,2,3,4]
squared = [n**2 for n in num]
print(squared)
#[1,4,9,16]
예시2) 조건을 추가한 리스트 생성
num=[1,2,3,4]
even_squared = [n**2 for n in numbers if n%2 == 0]
print(even_squared)
#[4,16]
알아두면 좋은 보조
[]: 리스트
(): 제너레이터 생성
tuple(): 튜플
{}: 집합
{:}: 딕셔너리
그럼 이제 위 문제를 다시 풀어보자
방법1)
sizes 리스트에 들어 있는 (w,h) 쌍을 순회해서 항상 더 큰 값을 가로(w), 더 작은 값을 세로(h)로 정리합니다.
max(w,h) : 두 값 중 큰 값 선택, 이 값이 가로(w)로 사용
min(w,h) : 두 값 중 작은 값 선택, 이 값이 가로(h)로 사용
방법2)
방법3)
a) 가로 최대 값 계산 (max_w)
max([w if w >= h else h for w, h in sizes])
각 (w,h) 쌍에서 w가 h 보다 크거나 같으면 w 사용, 아니면 h 사용
b) 세로 최대 값 계산 (max_h)
max([w if w <= h else h for w, h in sizes])
각 (w,h) 쌍에서 w가 h 보다 작거나 같으면 w 사용, 아니면 h 사용
코드를 최적화 하기 위해선 내장 함수를 외워서 활용하는 것이 아니라
가장 간단한 수학적 해결법을 찾는 것이 중요!
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]67258 : 보석 쇼핑 | 투포인트 탐색 (1) | 2024.10.28 |
---|---|
[프로그래머스]150368: 이모티콘 할인 행사 | DFS (2) | 2024.10.21 |
[프로그래머스]43165: 타겟 넘버 | DFS (0) | 2024.10.14 |
[프로그래머스] 1154539 : Lv2 뒤에 있는 큰 수 찾기| 스택 (0) | 2024.09.23 |
[프로그래머스] 12921번 : Lv1 소수 찾기 | 에라토스테네스의 체 (0) | 2024.09.15 |