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라는 점을 발견해 최대 거리를 업데이트해가는 방식으로 코드를 작성하였다.
'Coding Test > Hash Table' 카테고리의 다른 글
[LeetCode] 3. Longest Substring Without Repeating Characters (0) | 2024.12.05 |
---|---|
[LeetCode] 1. Two Sum (2) | 2024.12.02 |
[LeetCode] 3010. Divide an Array Into Subarrays With Minimum Cost I (0) | 2024.12.01 |
[LeetCode] 3174. Clear Digits (2) | 2024.12.01 |
[LeetCode] 977. Squares of a Sorted Array (0) | 2024.12.01 |