| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- leetcode
- 프로그래머스
- 코딩테스트
- on-prem
- C++
- 하늘과 바람과 별과 시
- ingress-nginx
- K8S
- 2022
- Code Jam
- 알고리즘
- Qualification Round
- hackerrank
- 하늘과 바람과 별과 詩
- Python
- ProblemSolving
- Certbot/dns-route53
- GitLab
- 3D PRINTING
- 파이썬
- MySQL
- Code Jam 2022
- 리트코드
- Kubernetes
- 문제해결
- 해커랭크
- swift
- LEVEL 2
- Algorithm
Archives
- Today
- Total
공대생의 비망록
[LeetCode][Easy] Move Zeroes Python 풀이 본문
멍청한 풀이: 시간복잡도 O(n^2)
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i = len(nums) - 1; j = 0; zeros = 0; moved = 0
while i >= 0:
if nums[i] != 0:
zeros += 1
i -= 1
else:
if zeros == 0: # if there's 0 at the end of the array, skip.
i -= 1
continue
for j in range(zeros):
nums[i+j] = nums[i+j+1]
nums[i+j+1] = 0
zeros = 0
moved += 1
i = len(nums) - moved - 1
O(n)으로 개선하였으나 for-loop를 2번 사용하는 풀이:
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
zeros = 0; i = 0; j = 0; size = len(nums)
while i < size:
if nums[i] == 0:
zeros += 1
else:
nums[j] = nums[i]
j += 1
i += 1
for ind in range(zeros):
nums[size - ind - 1] = 0
변수 사용 최소화는 물론 for-loop 역시 단 한번만 써서 문제를 해결하는 풀이 (시간복잡도는 역시 O(n)):
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
j = 0
for i in range(len(nums)):
if nums[i] != 0:
# if i != j:
tmp = nums[i]; nums[i] = 0; nums[j] = tmp
j += 1'Programming Language > Python' 카테고리의 다른 글
| [LeetCode][Easy] Missing Number Python 풀이 (0) | 2026.02.08 |
|---|---|
| [LeetCode][Easy] Merge Sorted Array Python 풀이 (0) | 2026.02.07 |
| [LeetCode][Easy] Contains Duplicate 문제 Python 풀이 (0) | 2026.02.05 |
| [LeetCode][Easy] Two Sum 문제 Python 풀이 (0) | 2026.02.05 |
Comments
