https://school.programmers.co.kr/learn/courses/30/lessons/86491
✳️ 코드 작성
🤔 코드 아이디어
1. 가로와 세로에 대한 빈 리스트를 형성한다.
2. sizes를 순회하면서 각 요소의 최대값과 최소값을 찾는다.
3. 요소 중에 최대값은 가로 리스트에 추가하고 최소값은 세로 리스트에 추가한다.
→ 세로가 더 길면 가로로 써도 되기 때문에 세로에는 가로보다 작은 값을 넣어 줘야겠다고 생각했다.
4. 가로 리스트와 세로 리스트의 최대값을 곱한다.
💟 코드 풀이
def solution(sizes):
w = []
h = []
for i in sizes:
w.append(max(i))
h.append(min(i))
return max(w) * max(h)
🟣 빈 리스트 w, h 생성
- 가로 : w 리스트
- 세로 : h 리스트
🟣 sizes를 for문으로 순회
- sizes는 2차원 배열이라고 나와있고, 2차원 배열 또한 리스트 안에 리스트가 있는 구조라서 순회를 할 수 있다.
- i 는 size 내의 요소들을 나타낸다.
🔹예시
sizes = [[60, 50], [30, 70], [60, 30], [80, 40]]
- sizes의 예시가 위와 같다면?
- 첫 번째 순회할 때는 요소(i) 가 [60, 50]이 됨
- 두 번째 순회할 때는 요소(i) 가 [30, 70]이 됨
- 세 번째 순회할 때는 요소(i) 가 [60, 30]이 됨
- 네 번째 순회할 때는 요소(i) 가 [80, 40]이 됨
🟣 요소 중 최대값은 w 리스트에 최소값은 h 리스트에 추가
- i라는 요소로 들어온 또 다른 리스트에는 값이 2개가 있는 걸 위의 예시로 확인 할 수 있다!
- 두 값 중에 가장 큰 값은 가로 리스트로, 가장 작은 값은 세로 리스트로 추가한다.
- 이렇게 하면 아래와 같은 경우를 만들 수 있기 때문이다!
▶ 세로가 더 길면 가로로 써도 되기 때문에 가로보다 작은 값을 넣어줘야 한다고 생각해볼 수 있다.
- 이렇게 하면 아래와 같은 경우를 만들 수 있기 때문이다!
🔹예시
- 첫 번째 순회일 때 요소(i)가 [60, 50], w = [60], h = [50]
- 두 번째 순회일 때 요소(i)가 [30, 70], w = [60, 70], h = [50, 30]
- 세 번째 순회일 때 요소(i)가 [60, 30], w = [60, 70, 60], h = [50, 30, 30]
- 네 번째 순회일 때 요소(i)가 [80, 40], w = [60, 70, 60, 80], h = [50, 30, 30, 40]
🟣 각 리스트의 최대값 곱해서 반환
- 최종적으로 가장 작은 직사각형이어야 하나, 모든 명함이 들어가는 사이즈로 만들 수 있는 크기는 가로(최대값들만 모아둔 가로 리스트) 최대 세로(최소값들만 모아둔 세로 리스트) 최대를 곱해서 나온 크기를 구해 반환한다.
🔹예시
- 최종적으로 가장 큰 너비는 80, 가장 큰 높이는 50이므로, 80 * 50 = 4000이 반환
💟 축약 코드
- 위에 코드와 동일한 방식을 가지지만 리스트 컴프리헨션을 사용해서 축약할 수 있다.
def solution(sizes):
return max(max(i) for i in sizes) * max(min(i) for i in sizes)
'📒 Today I Learn > 🐍 Python' 카테고리의 다른 글
[Python] 숫자 문자열과 영단어 (딕셔너리 이용) (0) | 2024.09.12 |
---|---|
[Python] 시저 암호 (chr, ord) (0) | 2024.09.11 |
[Python] 크기가 작은 부분 문자열 (0) | 2024.09.09 |
[Python] 삼총사 문제로 삼중 for문 (0) | 2024.09.06 |
[Python] 대문자 소문자 구분과 확인 (0) | 2024.09.05 |