<로직 고민/>
- 음..일단 nums를 for문으로 돌려서 각 요소의 개수를 세서 2보다 크면 해당 요소 중 가장 뒤에 있는 인덱스에서 빠지도록 pop을 했는데 예시만 통과한다
- pop()에 괄호에 들어가는 게 인덱스인가보다..!
- 그 값이 삭제되는 건 remove()밖에 안 되나?
- nums를 맨 뒤 인덱스부터 순환하고 해당 요소가 2보다 클 때 remove(해당요소) 했더니 테스트 통과했다
<완성된 풀이/>
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
for num in nums[::-1]:
if nums.count(num) > 2:
nums.remove(num)
return len(nums)
- 아니 이런 점수....충격적인데...?
- 매번 count메서드를 사용하는 게 시간복잡도를 올린 것인가
- 근데 공간복잡도는 왜......?
- 이런저런 거 할당하지 않은 것 같은데..어디서 잘못된 거야,,,
<다른 사람 풀이/>
- 천재풀이1
class Solution(object):
def removeDuplicates(self, nums):
k = 0
for i in nums:
if k < 2 or i != nums[k - 2]:
nums[k] = i
k += 1
return k
- 진짜 인덱스 가지고 노는 거는 왜케 이해가 안 되지..
- 뭔가 하나씩 정렬을 하고 값이 2개가 되면 다음 숫자를 넣는 그런 방식인 거 같은데 완벽하게 이해가 되지는 않는다,,,
- 근데 이것도 시간복잡도, 공간복잡도는 나랑 비슷하네
- Time: 73 ms (25.06%), Space: 16.4 MB (14.68%)
- 천재풀이2
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
for i in range(len(nums)-2,0,-1):
if(nums[i]==nums[i-1] and nums[i]==nums[i+1]):
nums.pop(i+1)
return len(nums)
- 이건 nums를 거꾸로 순회하면서 앞뒤로 같은 숫자가 있으면 해당 숫자의 다음 숫자를 없애는 것 같다
- 여튼 이것도 인덱스로 갖고 노는 거네
- 어렵다,,
- 이게 좀 빠른 풀이군......흠....
- Time: 54 ms (89.93%), Space: 16.3 MB (52.70%)