이번 문제는 아래와 같습니다.
입력값은 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;
}
}
'etc. > Leetcode' 카테고리의 다른 글
Leetcode - 326. Power of Three - Easy (0) | 2022.08.25 |
---|---|
Anagram - different approach with ArrayList without loop (0) | 2022.08.24 |
Leetcode - 704. Binary Search - Easy (0) | 2022.08.22 |
Leetcode - 35. Search Insert Position + Big O + binary search (0) | 2022.08.21 |
Leetcode - 28. Implement strStr() - Easy (0) | 2022.08.18 |
Leetcode - 26. Remove Duplicates from Sorted Array - Easy (0) | 2022.08.18 |
Leetcode - 20. Valid Parentheses - Easy (0) | 2022.08.14 |
Leetcode - 14. Longest Common Prefix - Easy (0) | 2022.08.11 |
Leetcode - 13. Roman to Integer - Easy (0) | 2022.08.08 |
Leetcode - 9. Palindrome Number - Easy (0) | 2022.08.06 |