Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알고리즘풀이
- 릿코드풀기
- 파이썬 프로그래머스
- python priority queue
- 파이썬 릿코드
- 파이썬알고리즘
- python Leetcode
- python 릿코드
- binary search
- leetcode풀기
- 릿코드 파이썬
- 릿코드풀이
- python xor
- 파이썬알고리즘풀기
- 알고리즘풀기
- leetcode 풀기
- python sorted
- 잇츠디모
- 파이썬릿코드풀기
- LeetCode
- python zip_longest
- 파이썬릿코드
- leetcode풀이
- 릿코드
- 파이썬 알고리즘 풀기
- python 알고리즘
- 상가수익률계산기
- 파이썬 알고리즘
- 코틀린기초
- 릿코드 풀기
Archives
- Today
- Total
소프트웨어에 대한 모든 것
LeetCode 풀기 - 189. Rotate Array 본문
반응형
189. Rotate Array
https://leetcode.com/problems/rotate-array/
문제)
솔루션1)
공간복잡도를 O(N)으로 생각하면 굉장히 심플한 문제이다.
1) 임시 배열 생성
2) nums에서 k만큼 이동한 index에 값을 임시 배열에 넣는다
3) 임시 배열의 값을 nums에 복사
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
# 시간복잡도 : O(N)
# 공간복잡도 : O(N)
temps = [0] * len(nums)
for i, n in enumerate(nums):
temps[(i+k)%len(nums)] = n
for i, n in enumerate(temps):
nums[i] = n
솔루션2)
여기에서 원하는 솔루션은 공간복잡도 O(1)을 만족해야한다.
아무리 짱구를 굴려도 공간복잡도 O(1)로 구현할 해결책이 보이지 않는다.
Discussion을 참조하였다.
풀이 방법은 아래와 같다. fact에 근거해서 풀어가는 솔루션이다.
k = 3
Original array : 1 2 3 4 5 6 7
array 전체 역순 : 7 6 5 4 3 2 1
앞에 k개 만큼 역순 : 5 6 7 4 3 2 1
k+1부터 마지막까지 역순 : 5 6 7 1 2 3 4 ---> 정답
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
# 시간복잡도 : O(N)
# 공간복잡도 : O(1)
k %= len(nums)
def reverse(nums, l, r):
while l < r:
nums[l], nums[r] = nums[r], nums[l]
l, r = l + 1, r - 1
r = len(nums) - 1
reverse(nums, 0, r)
reverse(nums, 0, k-1)
reverse(nums, k, r)
반응형
'알고리즘 > LeetCode' 카테고리의 다른 글
LeetCode 풀기 - 43. Multiply Strings (0) | 2021.11.10 |
---|---|
LeetCode 풀기 - 1704. Determine if String Halves Are Alike (0) | 2021.11.10 |
LeetCode 풀기 - 278. First Bad Version (0) | 2021.11.10 |
LeetCode 풀기 - 704. Binary Search (0) | 2021.11.10 |
LeetCode 풀기 - 890. Find and Replace Pattern (0) | 2021.11.09 |
Comments