알고리즘 스터디/Python

[LeetCode] 1331. Rank Transform of an Array

hkl22 2024. 9. 12. 11:19

1331. Rank Transform of an Array

LeetCode

https://leetcode.com/problems/rank-transform-of-an-array/

문제

  • 정수 배열 arr가 주어졌습니다.
  • arr의 각 요소를 다음 조건을 만족하는 순위로 변환하여 최종 상태의 정수 배열을 반환하는 코드를 작성하세요.
    • 순위는 값이 얼마나 큰지를 나타내며 1부터 시작하는 정수입니다.
    • 값이 클수록 순위가 높으며 값이 같다면 순위는 동일합니다.
    • 가능한 작은 순위를 사용합니다.

예제

  • Input: arr = [40, 10, 20, 30]
  • Output: [4, 1, 2, 3]

풀이 과정

  • 주어진 배열 arr를 중복된 값을 제거한 집합(set)으로 변환한 후 오름차순으로 정렬된 리스트를 생성합니다.
  • 이 리스트의 각 요소와 인덱스를 추출하여 요소를 키로 하고 순위(인덱스+1)를 값으로 갖는 딕셔너리를 생성하고 변수 rank에 저장합니다.
  • arr의 모든 요소를 순회하며 각 요소에 대한 rank에서 조회한 순위를 리스트로 생성하여 반환합니다.

코드(Python)

class Solution:
    def arrayRankTransform(self, arr: List[int]) -> List[int]:
        rank = {n: (i + 1) for i, n in enumerate(sorted(set(arr)))}
        return [rank[num] for num in arr]

참고

  • enumerate(객체) : 반복 가능한 객체의 인덱스와 요소를 함께 추출하여 반환