-
[프로그래머스] 최소직사각형 - Python3Problem Solving/브루트포스 2023. 1. 11. 23:45
문제 설명
여러 명함 사이즈가 주어질 때, 명함을 모두 넣을 수 있는 지갑의 최소 크기를 구하는 문제
- 알고리즘 분류 - Brute Force
- 난이도 - Level 1
접근 방법 - Brute Force
명함을 돌릴 수 있기에 가로와 세로 중 큰 값이 중요하다.
따라서 가로와 세로 중 큰 값이 뒤로 올 수 있도록 각 배열을 정렬하고, 배열의 왼쪽 값과 오른쪽 값의 각 최댓값을 구해 곱하였다.
답안 코드 - Brute Force
정확성: 100, 합계: 100.0 / 100.0
def solution(sizes): answer = 0 max_i = 0 max_j = 0 for size in sizes: size = sorted(size) if max_i < size[0]: max_i = size[0] if max_j < size[1]: max_j = size[1] answer = max_i * max_j return answer
T(N) = 1+1+1+N*(2log2+1+1+1+1+1)+2 = (5+2log2)N+5
로그의 밑이 2라고 가정하면 T(N) = 7N+5
프로그래머스 내에서 추천을 가장 많이 받은 코드는 아래와 같다. 실행시간은 평균적으로 내 코드에 비해 2배 정도 빨랐다.
def solution(sizes): return max(max(x) for x in sizes) * max(min(x) for x in sizes)
시간복잡도를 구해보면
T(N) = (N*2+N)*2 + 1= 6N + 1
...이게 맞나? 잘 모르겠다.
아무튼 코드 최적화는 경이로우면서도 나한텐 아직 이른 것 같다. 당분간은 문제 푸는 데에만 집중해야지
'Problem Solving > 브루트포스' 카테고리의 다른 글
[백준-python] 1259번: 팰린드롬수 (0) 2022.03.04 브루트포스(brute force search)란? (0) 2022.02.07 [백준-python] 1436번: 영화감독 숌 (0) 2022.01.27 [백준-python] 1018번: 체스판 다시 칠하기 (0) 2022.01.24 [백준-python] 7568번: 덩치 (0) 2022.01.24