<로직 고민/>
- 중복을 제거하는 일이군
- set 함수를 사용해야겠어
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
result = set(nums)
return len(result)
- 왜 안 되지...?
class Solution:
def removeDuplicates(self, nums):
result = set(nums)
print(result)
return len(result)
print(Solution().removeDuplicates([0,0,1,1,1,2,2,3,3,4]))
# 출력화면
# set([0, 1, 2, 3, 4])
# 5
- vscode에서 해보면 되는데...
- set함수를 사용하지 않고 풀라는건가?
- 음 그러면...
- result라는 빈 리스트를 생성해서 nums를 for문에 돌리면서 result에 해당 요소가 없으면 추가하고 있으면 그냥 지나치는 로직을 짜면 될 것 같다
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
result = []
for num in nums:
if num not in result:
result.append(num)
return len(result)
- 또 문제를 잘못 읽은 건가..?
- 이렇게 했는데도 틀렸다
- output이 [1,1]로 나온다..
- 아 중복된 요소를 제거한 후의 요소 개수를 리턴하는 것 말고도 nums 원본 배열 자체를 바꿔야 하는 건가?
- 그럼 배열의 모든 요소를 바꿀 수 있게 nums[:]로 수정을 하고, set() 함수 바깥에 list()를 씌워서 리스트타입으로 다시 변환해야겠다
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
nums[:] = list(set(nums))
return len(nums)
- 이렇게 수정했는데 다른 테스트에서 틀렸다
- set()함수가 실행되면서 오름차순을 위반했다
- 왜 순서가 바뀌는지는 모르겠지만 마지막에 nums.sort()를 해줘야 할 것 같다
- 드디어 통과..!
<완성된 풀이/>
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
nums[:] = list(set(nums))
nums.sort()
return len(nums)
<다른 사람 풀이/>
- 천재풀이1
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
j = 1
for i in range(1, len(nums)):
if nums[i] != nums[i - 1]:
nums[j] = nums[i]
j += 1
return j
- 인덱스 풀이는 머릿속에서 잘 안 그려져서 어려운 것 같다
- 인덱스 0과 1을 비교하고, 1과 2를 비교하고, 2와 3을 비교하고 이런 식인가보군??
- 천재풀이2
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
nums[:] = sorted(set(nums))
return len(nums)
- 아 나도 sort() 메서드 말고 sorted() 함수 썼으면 딱이네
- 오 근데 list()로 안 감싸도 되나보네~