관리 메뉴

솜씨좋은장씨

[Programmers] 위클리 챌린지 8주차 - 최소직사각형 (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 위클리 챌린지 8주차 - 최소직사각형 (Python)

솜씨좋은장씨 2021. 10. 1. 00:34
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스 위클리 챌린지 8주차! 최소직사각형 입니다.

 

코딩테스트 연습 - 8주차

[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133

programmers.co.kr

👨🏻‍💻 코드 풀이

여러 명함의 크기를 알려주면 이 모든 명함들을 담을 수 있는 가장 작은 크기의 명함케이스의 크기를 구하는 문제입니다.

의외로 엄청 쉽게 풀 수 있는 문제입니다.

명함의 가로 세로 길이 중에서 가장 긴 길이로 먼저 명함케이스의 길이를 지정하면 쉽게 풀 수 있는 문제입니다.

먼저 각 명함의 길이들을 앞쪽에 더 긴 길이가 오도록 정렬합니다.

[[60, 50], [30, 70], [60, 30], [80, 40]]
-> [[60, 50], [70, 30], [60, 30], [80, 40]]
sizes = [sorted(size, reverse=True) for size in sizes]

여기서 각 값들의

첫번째 값들을 명함케이스의 가로 길이 후보

두번째 값들을 명함케이스의 세로 길이 후보로 만들어줍니다.

[[60, 50], [70, 30], [60, 30], [80, 40]]
- 가로 길이 후보 : [60, 70, 60, 80]
- 세로 길이 후보 : [50, 30, 30, 40]
widths = [size[0] for size in sizes]
heights = [size[1] for size in sizes]

각 후보에서 가장 큰 값을 명함케이스의 가로길이, 세로길이로 지정합니다.

- 가로 길이 후보 : [60, 70, 60, 80] 
  => 가로 길이 = 80
- 세로 길이 후보 : [50, 30, 30, 40]
  => 세로 길이 = 50
width, height = max(widths), max(heights)

정답은 이렇게 구한 명함케이스의 크기를 구하는 것이므로

answer = width * height

가로와 세로의 길이를 곱한 값입니다.

 

전체 코드는 아래를 참고해주세요.

👨🏻‍💻 코드 ( Solution )

def solution(sizes):
    answer = 0
    
    sizes = [sorted(size, reverse=True) for size in sizes]
    
    widths = [size[0] for size in sizes]
    heights = [size[1] for size in sizes]
    
    width, height = max(widths), max(heights)
    
    answer = width * height
    
    return answer

 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments