Algorithm/프로그래머스

[세무민의 코딩일기] 위클리 챌린지 8주차 최소직사각형 문제 풀이

세기루민 2021. 10. 30. 18:15
728x90

이번에 풀어본 문제는 위클리 챌린지 8주차 최소직사각형 문제입니다. 

사실 이 문제는 어렵지 않고 쉬운데 커피숍에서 친구 기달리는 시간에 풀어봤습니다. 


1. 문제 설명


2. 제한 사항 및 입출력


3. 문제풀이 

이번 문제는 카드의 가로와 세로중 가장 큰 값을 구해주면 됩니다. 

가로와 세로중 가장 큰 값이라고 하면 해당 값을 정렬해서 가장 큰 값 2개를 곱해주면 끝입니다. 

그렇지만 가장 중요하게 봐야 하는 포인트는 카드를 눕힐 때 세로와 가로를 바꿔서 눕힐 수 있다는 점

그 말은 즉 가로에는 가장 큰값들 세로에는 가장 작은값들을 넣은 뒤 정렬해서 그 중에 큰 값을 가져오면 됩니다. 

예시 1번을 보면 원래는 80과 70으로 5600이 가장 크지만 (30, 70)을 세로로 눕혀서 80과 다음으로 큰 50으로 4000이 

나온 결과를 보면 위의 방법처럼 풀어야 한다는 생각이 들 것입니다. 

 


4. 코드 

## 8주차_최소직사각형
#  가로 * 세로 : MAX 
#  가로와 세로의 값이 섞일 수 있다는 점을 유의 

sizes = [[60, 50], [30, 70], [60, 30], [80, 40]]
frontMax = 0
endMax = 0
front, end = 0, 0
answer = 0


for size in sizes:
    front = size[0]
    end = size[1]
    
    if(front < end):
        tmp = 0
        tmp = front
        front = end 
        end = tmp 
    
    
    if(frontMax < front):
        frontMax = front
        
    if(endMax < end):
        endMax = end

        
answer = frontMax * endMax
return answer

위의 코드처럼 생각보다 쉬운 편입니다. 

말 그대로 sizes에서 front와 end 부분을 구분해서 나눈 뒤 만일 end보다 front가 작은 경우라면 둘을 변경해주면서 

front에 가장 큰 값들로 end에는 가장 작은 값들을 넣어주고 max에는 가장 큰값들을 넣어주고 

마지막까지 남는 값이라면 가장 큰 카드의 값이기 때문에 가로와 세로를 곱해주면 끝입니다. 


 5. 결과

결과는 정답입니다. 

생각보다 문제가 쉬운편이라서 쉽게 풀었습니다. 

원래 이번주에 백준에서 LCA 알고리즘을 공부하려고 했는데

최근들어서 시간이 너무 없어서 틈틈히 간단한 문제라도 풀어볼 생각입니다. 

시간이 되면 좀 더 좋은 포스팅과 알고리즘으로 찾아오겠습니다.

728x90