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(객체) : 반복 가능한 객체의 인덱스와 요소를 함께 추출하여 반환
'알고리즘 스터디 > Python' 카테고리의 다른 글
| [LeetCode] 2351. First Letter to Appear Twice (0) | 2024.09.16 |
|---|---|
| [LeetCode] 1385. Find the Distance Value Between Two Arrays (0) | 2024.09.12 |
| [LeetCode] 3178. Find the Child Who Has the Ball After K Seconds (0) | 2024.09.10 |
| [LeetCode] 3280. Convert Date to Binary (0) | 2024.09.10 |
| [LeetCode] 1800. Maximum Ascending Subarray Sum (0) | 2024.09.09 |