없는 숫자 더하기 문제
https://programmers.co.kr/learn/courses/30/lessons/86051
문제설명
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한조건
- 1 ≤ numbers의 길이 ≤ 9
- 0 ≤ numbers의 모든 원소 ≤ 9
- numbers의 모든 원소는 서로 다릅니다.
입출력 예시
numbers result [1,2,3,4,6,7,8,0] 14 [5,8,4,0,6,7,9] 6 입출력 예 설명
- 입출력 예 #1
5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.- 입출력 예 #2
1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.
class Solution {
public int solution(int[] numbers) {
int total = 45;
for(int i = 0 ; i < numbers.length; i++){
total -= numbers[i];
}
return total;
}
}
ArrayList에 0 ~ 9 를 넣어 이중for문을 통해 numbers와 ArrayList를 하나씩 비교하여 없는 수를 찾으려고 하였다. 이 때 코드는for(int i = 0; i < numbers.length; i++){
for(int j = 0; j < list.size(); j++){
if(numbers[i] == list.get(j)) {
list.remove(i);
break;
}
}
}
하지만 이 코드는 IndexOutOfBoundsException가 발생했고 이유를 생각해보니 list.remove()를 통해 반복마다 list 크기가 줄여져 두 번째 for 문의 list.size() 값이 계속 줄어든다는 것이었다.
-> list.remove()를 쓸 때 list의 size도 줄어든다는 것을 기억하자!