반응형
주어진 정수 배열 nums와 정수 val이 주어졌을 때, nums에서 val의 모든 발생을 제자리에서 제거합니다. 요소의 순서는 변경될 수 있습니다. 그런 다음 val과 같지 않은 요소의 수를 반환합니다.
val과 같지 않은 요소의 수를 k라고 할 때, 다음의 작업을 수행하여 승인을 받아야 합니다:
int[] nums = [...]; // 입력 배열
int val = ...; // 제거할 값
int[] expectedNums = [...]; // 올바른 길이를 가진 예상 답안.
// val과 같은 값이 없으며 정렬되어 있음.
int k = removeElement(nums, val); // 구현을 호출함
assert k == expectedNums.length;
sort(nums, 0, k); // nums의 처음 k개의 요소를 정렬함
for (int i = 0; i < actualLength; i++) {
assert nums[i] == expectedNums[i];
}
배열 nums를 변경하여 nums의 처음 k개의 요소가 val과 같지 않은 요소를 포함하도록 합니다. nums의 남은 요소들은 중요하지 않으며, nums의 크기도 중요하지 않습니다. k를 반환합니다.
예시 1:
- 입력: nums = [3,2,2,3], val = 3
- 출력: 2, nums = [2,2,_,_]
- 설명: 함수는 k = 2를 반환해야 하며, nums의 처음 두 요소는 2여야 합니다. 반환된 k 이후의 요소들은 중요하지 않습니다 (따라서 밑줄로 표시).
예시 2:
- 입력: nums = [0,1,2,2,3,0,4,2], val = 2
- 출력: 5, nums = [0,1,4,0,3,_,_,_]
- 설명: 함수는 k = 5를 반환해야 하며, nums의 처음 다섯 요소는 0, 1, 4, 0, 3을 포함해야 합니다. 이 다섯 요소는 어떤 순서로든 반환될 수 있습니다. 반환된 k 이후의 요소들은 중요하지 않습니다 (따라서 밑줄로 표시).
제약 조건:
- 0 <= nums.length <= 100
- 0 <= nums[i] <= 50
- 0 <= val <= 100
풀이
두 개의 포인터를 가지고 배열을 순차적으로 검사하면 됩니다. j는 배열의 모든 요소를 탐색합니다. 탐색중 삭제해야 하는 val과 다른 값을 가지고 있다면 현재 i 포인터의 위치의 값에 쓰고 i를 증가 시킵니다. 모든 탐색이 끝나게 되면 우리가 삭제해야하는 배열 요소만 삭제하고 원하는 답을 구할 수 있습니다.
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
i = 0
for j in range(len(nums)):
if nums[j] != val:
nums[i] = nums[j]
i += 1
return i
반응형
'알고리즘 문제 > Easy' 카테고리의 다른 글
| 로마 숫자를 정수로 변환하기 - 13. Roman to Integer (0) | 2024.08.23 |
|---|---|
| [Easy] 주식을 팔아 최대 이익을 얻는 날 구하기 - 121. Best Time to Buy and Sell Stock (0) | 2024.08.13 |
| [Easy] 배열에서 과반이 넘는 요소 찾기 - 169. Majority Element (0) | 2024.08.09 |
| [Easy] 정렬된 배열에서 중복 제거 - 26 Remove Duplicates from Sroted Array (0) | 2024.08.07 |
| [Easy] 정렬된 배열 병합 - 88. Merge Sorted Array (1) | 2024.07.30 |