반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함

Leetcode - 27. Remove Element - Easy

2022. 8. 17. 15:29 | Posted by 솔웅


이번 문제는 아래와 같습니다.

 

입력값은 int 배열과 int 숫자 입니다.

결과 값은 해당 배열에서 두번쨰 입력값 인 숫자를 제외한 나머지 숫자들의 갯수 입니다.

 

첫번째 예제를 보면 입력값이 3,2,2,3 과 3인 경우 3을 제외하면 2,2 가 남으니 정답은 2 가 됩니다.

두번째 예제는 입력값이 0,1,2,2,3,0,4,2 와 2 이니 2를 제외하면 0,1,3,0,4 가 남으니 정답은 5가 됩니다.

 

이번 문제는 비교적 쉬운것 같습니다.

 

class Solution {
    public int removeElement(int[] nums, int val) {
        int i = 0; // 결과 값을 저장할 변수 
        for(int j=0; j < nums.length; j++) { // 입력된 배열의 아이템 숫자 만큼 for 문을 돌린다.
            if(nums[j] != val) { // 배열 내 해당 숫자가 입력된 val과 같지 않으면 아래 문을 실행한다.
                nums[i] = nums[j]; // nums의 i 번째에 nums의 j번째를 넣는다.
                i++; // i를 1씩 증가한다.
            }
        }
        return i;
    }
}

 

어떻게 돌아가나 알아보기 위해 for 문과 if 문 사이에 프린트 문을 넣어 봤습니다.

 

 

입력값은 3,2,2,3 과 3 입니다.

첫번째 루프에서는 배열의 첫번째 값인 3과 입력값인 3이 같기 때문에 if 문이 실행 되지 않습니다.

그렇기 때문에 j와 i는 모두 초기값인 0이 됩니다.

 

두번째 루프에서는 j 가 1이 되고 두번쨰 값인 2와 입력값인 3이 같지 않기 때문에 if 문이 실행이 되어서 i에 1이 더해 집니다.

세번째도 값이 2이니까 if 문에 실행 되어서 i에 1이 더해 집니다. 그래서 i 값은 2가 됩니다.

네번쨰는 값이 3이라서 if 문이 실행 되지 않습니다. If 문이 실행 되지 않아서 i는 여전히 2 입니다.

 

For 루프문이 다 돌았기 때문에 i 값인 2가 반환 됩니다.

 

조금 다르게 접근 할 수도 있습니다.

class Solution {
    public int removeElement(int[] nums, int val) {
        int i = 0;
        int n = nums.length;
        
        while(i < n){ // 배열의 아이템 개수만큼 루프를 돌립니다.
            if(nums[i] == val) { // 해당 값이 Val 과 같으면
                nums[i] = nums[n-1]; // 해당 값은 그 이전 값 배열의 n 번째 숫자 (첫번쨰 루프 라면 맨 마지막 숫자인 3이 됨)
                n--; // n에서 1을 제외 한다. 
            } else {
                i++; // 같지 않으면 i를 1 증가 시킨다.
            }
        System.out.println("i is " + i + " n is " + n);
        }
        return n;
    }
}

 

 

반응형

Comment