본문 바로가기
Coding Test/Hash Table

[LeetCode] 849. Maximize Distance to Closest Person

by 헤이즐넛 좋아하는 개발자 2024. 12. 2.

I. Description

문제 링크: https://leetcode.com/problems/maximize-distance-to-closest-person/description/


II. Code

class Solution:
    def maxDistToClosest(self, seats: List[int]) -> int:
        # 왼쪽 끝이 빈자리인 경우 (마지막 i는 빈자리가 아닌 왼쪽 끝)
        i = 0
        left_cnt = 0
        while seats[i] == 0:
            left_cnt += 1
            i += 1
        # 오른쪽 끝이 빈자리인 경우 (마지막 j는 빈자리가 아닌 오른쪽 끝)
        j = len(seats)-1
        right_cnt = 0
        while seats[j] == 0:
            right_cnt += 1
            j -= 1
        # 중간 빈자리 계산
        max_cnt = 0
        cnt = 0
        for k in range(i, j+1):
            if seats[k] == 0:
                cnt += 1
            else:
                if cnt > max_cnt:
                    max_cnt = cnt
                cnt = 0
        return max(left_cnt, right_cnt, (max_cnt+1)//2)

왼쪽 끝이 빈자리인 경우 오른쪽으로 가면서 빈자리의 개수가 곧 만들 수 있는 하나의 최대 거리이므로 left_cnt라는 변수값에 저장해두고, 오른쪽 끝이 빈자리인 경우 동일한 방식으로 또 하나의 최대 거리를 right_cnt라는 변수값에 저장한다. 그 중간에 대해서는 3자리가 비어있으면 최대 거리가 (3+1)//2 = 2, 4자리가 비어있으면 최대 거리가 (4+1)//2 = 2라는 점을 발견해 최대 거리를 업데이트해가는 방식으로 코드를 작성하였다.