알고리즘/LeetCode

LeetCode 27. Remove Element

Timha 2023. 8. 24. 22:23

 

 

이 문제도 동일하게 nums의 배열을 그대로 두고 내부에서 수를 바꿔줘야했다.

 

숫자를 delete로 지워줄까 생각했지만 투포인터로 사용하게되면 O(n)으로 풀 수 있겠다 생각이 들어서 투포인터를 사용해서 풀었다.

 

앞포인터의 숫자가 제거해야 할 val의 숫자와 동일하다면 뒷포인터와 앞포인터의 숫자를 교체 한 후 

 

뒷포인터의 위치를 -1 움직여준다.

 

다시 동일하게 시행한 후 숫자를 모두 교체한 후 교체된 횟수만큼 뒤에서 pop으로 숫자를 제거해준다. 

class Solution(object):
    def removeElement(self, nums, val):
        cnt = 0 #숫자의 카운트 
        move =0 
        num_count = len(nums)-1
        while move <= num_count:
            changeNum= nums[num_count]
            if nums[move]== val :
                nums[num_count] = nums[move] 
                nums[move] = changeNum
                num_count-=1 
                cnt+=1
            else:
                move+=1
        for __ in range(cnt):
            nums.pop()


#sudo
class Solution(object):
    def removeElement(self, nums, val):
        cnt = 교체횟수 
        move = 앞 포인터 
        num_count = 뒷 포인터
        while 포인터의 위치 <= nums의 갯수:  # move 포인터의 위치가 위치포인터를 넘어서거나 동일해지면 정지
            changeNum= nums[뒷 포인터]
            if nums[포인터의위치]== val : 
                nums[num_count] = nums[move]  # 앞포인터와 뒷 포인터의 숫자를 맞교환
                nums[move] = changeNum # 앞포인터와 뒷 포인터의 숫자를 맞교환
                num_count-=1  # 뒷 포인터 위치 -1 감소
                cnt+=1   # 교체한 횟수
            else:
                move+=1  # 앞포인터 위치 +1 증가
        for __ in range(cnt): # 교체한 횟수만큼 pop실행
            nums.pop()

투표를 제일 많이 받은 코드 

 

def removeElement(self, nums, val):
    i = 0
    for x in nums:
        if x != val:
            nums[i] = x
            i += 1
    return i

알고보니 그냥 nums의 리스트 안에 숫자를 넣어서 제출하면 되는 문제였다.. 영어이슈 ..