-
[LeetCode/JAVA] 27. Remove ElementETC/Algorithm 2023. 8. 23. 16:20
문제
배열 nums와 정수 val이 주어지고, nums 배열안에 존재하는 val 값을 전부 제거해야하는데 "in-place" 방식으로 제거해야한다고 한다.
배열 정렬은 바뀌어도 된다고하고, val 값과 같지 않은 nums 배열의 요소 길이를 반환하라고 한다.여기서 in-place 방식이 뭐지? 정확한 의미를 찾아봤다.
자료 구조를 추가로 사용하지 않고 입력을 변환하는 알고리즘 이라고 하는데, 그럼 nums라는 배열을 그대로 사용해서 val과 같은 값을 제거하고 결과로 남은 유효한 배열의 길이를 반환해야겠다고 생각했다.
풀이
가장 먼저 val과 같은 값을 전부다 비교해야할 것이다.
for문을 통해서 0번 째 인덱스 부터 반복문을 진행하고, 반복을 진행했을 때 val과 관련이 있다면 nums 배열에서 사라지게 만들어줘야 했다.
그래서 배열을 0~nums.length 까지 val과 비교를 하고, 변경할 위치 0으로 시작해서 val과 다르다면 nums의 해당 요소를 변경할 위치로 값을 입력해주면 연산이 전부 끝났을 때 마지막으로 변경된 위치가 유효한 배열의 길이가 될 것이다.
코드
class Solution { public int removeElement(int[] nums, int val) { // 인덱스 0 부터 비교를 시작한다. int index = 0; // nums 배열 전체를 반복한다. for(int i = 0; i < nums.length; i++){ // 만약 nums[i] 가 val 값과 다르다면 if(nums[i] != val){ // 해당 위치를 nums[i]로 변경하고 nums[index] = nums[i]; // 변경할 위치를 다음 인덱스로 옮긴다. index++; } } // 가장 마지막으로 옮겨진 위치까지가 정리되어있는 배열의 길이이다. return index; } }