본문 바로가기
Python/알고리즘

[COS PRO 1급 #5-2] 물을 최대한 담고 싶어요

by 포푸리 (POPOOLY) 2023. 3. 4.
반응형

문제설명

아래와 같이 벽이 여러 개 있을 때, 벽 2개를 제외한 나머지 벽을 제거하여 물을 최대한 담으려 합니다. 물은 `두 벽 사이의 거리 x 두 벽 중 낮은 벽의 높이`리터 만큼 담을 수 있으며, 두 벽의 거리는 두 벽의 위치 차이입니다.

 

모든 벽의 위치와 높이를 담은 2차원 리스트 walls가 매개변수로 주어질 때, 물을 최대 몇 리터나 담을 수 있는지 return 하도록 solution 함수를 작성했습니다. 그러나, 일부 코드가 잘못되어 코드가 바르게 동작하지 않습니다. 주어진 코드가 모든 입력을 바르게 처리하도록 코드를 수정해주세요. 코드는 _**한 줄**_만 수정해야 합니다.

매개변수 설명

모든 벽의 위치와 높이를 담은 2차원 리스트 walls가 solution 함수의 매개변수로 주어집니다.
* walls는 길이가 3이상 100이하인 2차원 리스트입니다.
* walls의 각 원소는 [벽의 위치, 벽의 높이] 이고, 벽의 위치를 기준으로 오름차순으로 정렬되어 있습니다.
    * 벽의 위치는 1 이상 100 이하입니다.
    * 벽의 높이는 1 이상 100 이하입니다.

return 값 설명

물을 최대 몇 리터나 담을 수 있는지 return 합니다.

예시

| walls                                 | return |
|------------------------------------------|--------|
| [[1, 4], [2, 6], [3, 5], [5, 3], [6, 2]] | 12     |

예시 설명

아래와 같이 벽을 남겼을 때 물을 최대로 담을 수 있습니다. 이 때 최대 12리터를 담을 수 있습니다.

문제 코드

def solution(walls):
    answer = 0
    for i in range(len(walls)):
    	for j in range(i+1, len(walls)):
    		area = 0
    		if walls[i][1] > walls[j][1]:
    			area = walls[i][1] * (walls[j][0] - walls[i][0])
    		else:
    			area = walls[j][1] * (walls[j][0] - walls[i][0])
    		if answer < area:
    			answer = area
    return answer

풀이

def solution(walls):
    answer = 0
    for i in range(len(walls)):
    	for j in range(i+1, len(walls)):
    		area = 0
            
	        # 물을 담을 수 있는 양은 '두 벽 사이의 거리 x 두 벽 중 낮은 벽의 높이'
    		if walls[i][1] < walls[j][1]:
    			area = walls[i][1] * (walls[j][0] - walls[i][0])
    		else:
    			area = walls[j][1] * (walls[j][0] - walls[i][0])
    		if answer < area:
    			answer = area
    return answer

댓글