엔지니어 블로그

[Leetcode] 763. Partition Labels 본문

알고리즘

[Leetcode] 763. Partition Labels

안기용 2025. 4. 1. 10:34

문제내용

주어진 문자열 s를 파티션으로 나누면 되는 문제입니다. 여기서 파티션을 구분짓는 기준은 파티션 내 문자들이 각 파티션에서 최대 한번만 노출되어야합니다.

풀이

각 문자별로 for문을 이용하여 파티션 끝 값을 파악한 후에 해당 파티션 내 문자의 파티션이 가지고있는 파티션 범위가 포함되는지 확인한 후 길이를 반환하는 식으로 풀이했습니다.


class Solution:
    def partitionLabels(self, s: str) -> list[int]:
        list = [0] * 26

        #1.각각의 글자가 마지막으로 출현한 index를 파악한다.
        for i,char in enumerate(s):
            list[ord(char) - ord('a')] = i

        #2.파티션의 시작과 끝, 정답 list를 초기화한다
        partition_end = 0
        partition_start = 0
        partition_size = []

        for i,char in enumerate(s):
            #3.max를 이용하여 현재 글자의 파티션 끝과 이전 글자의 파티션 끝 값을 비교한다.
            partition_end = max(list[ord(char) - ord('a')],partition_end)

            #4.만일 현재 바라보고있는 문자의 파티션 끝이 현재 index 값이라면 하나의 파티션이 완성 된 것이다. size를 append해주고 start 값을 조정한다.
            if i == partition_end:
                partition_size.append(i-partition_start+1)
                partition_start = partition_end + 1
        return partition_size

'알고리즘' 카테고리의 다른 글

[Leetcode] 49. Group Anagrams  (0) 2025.02.27
[Leetcode] 20. Valid Parentheses  (0) 2025.02.20
[Leetcode] 392.Is Subsequence  (0) 2025.02.12
[LeetCode] 1. Two Sum  (0) 2025.02.01
[Leetcode]2657. Find the Prefix Common Array of Two Arrays  (0) 2025.01.14