Problem Solving

Max Increase to Keep City Skyline

inspiring-ini 2024. 5. 23. 21:54

문제 번호, 이름: 807. Max Increase to Keep City Skyline

문제 링크: https://leetcode.com/problems/max-increase-to-keep-city-skyline

날짜: 2024/05/23

상태: 완료

 

이 문제를 고른 이유

리트코드 랜덤픽

문제 보고 처음 든 생각

문제가 길었다. 어려울거 같았다

문제를 다 읽었는데 풀이가 단번에 떠오르지 않았다

조금 더 생각을 해 보았다

 

n<=50 이니까 block 개수는 <=2500

n이 작으니까 모든 block을 iteration해도 되겠고, iteration 하면서 각 row와 column이 가진 최대 높이를 저장하면 될 것 같았다.

그리고 문제에서는 4방향에서 본다고 했지만 남북과 동서는 방향만 다를 뿐 숫자는 동일해서 사실상 2방향만 고려하면 될 것이다.

각 block이 높아질 수 있는 한도는 그 block이 속한 row와 column에 있는 다른 높은 block만큼 이므로 위에서 저장한 각 row와 column의 최대 높이를 이용해서 현재 block의 높이와의 차를 구하면 될 것이다

오.. 다행히 풀이가 바로 생각난 것 같다

풀이 v1

  • 소요 시간 12분
class Solution:
    def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:
        answer = 0
        n = len(grid)
        max_from_row = [0 for _ in range(n)]
        max_from_column = [0 for _ in range(n)]

        for i in range(n):
            for j in range(n):
                if grid[i][j] > max_from_row[i]:
                    max_from_row[i] = grid[i][j]

                if grid[i][j] > max_from_column[j]:
                    max_from_column[j] = grid[i][j]

        for i in range(n):
            for j in range(n):
                possible_max_height = min(max_from_row[i], max_from_column[j])
                answer += (possible_max_height - grid[i][j])
        
        return answer

 

성공

다른 사람 솔루션을 봐도 이렇게 푼 것 같아서 이대로 종료 

풀이 v2

  • 소요 시간
# if v2 exists

이 문제를 풀고 얻은 것

  • 오늘도 하긴 했다는 성취감

메모

  • 리트코드의 타이머 기능을 써 봤다

 

'Problem Solving' 카테고리의 다른 글

Find the Maximum Number of Elements in Subset  (0) 2024.05.26
Student Attendance Record II  (0) 2024.05.26
Simplified Fractions  (0) 2024.05.22
괄호만들기  (0) 2024.05.13
정수삼각형  (0) 2024.05.13