[프로그래머스] 없는 숫자 더하기 - Java

김동현·2022년 6월 21일

없는 숫자 더하기 문제
https://programmers.co.kr/learn/courses/30/lessons/86051

문제설명

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

제한조건

  • 1 ≤ numbers의 길이 ≤ 9
    - 0 ≤ numbers의 모든 원소 ≤ 9
    - numbers의 모든 원소는 서로 다릅니다.

입출력 예시

numbersresult
[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;
    }
}
  • numbers 배열에 없는 수의 합을 구하는 문제이다. 0 ~ 9까지의 숫자이기 때문에 최대 합은 45이다.
  • 45에서 numbers 배열에 있는 숫자를 뺀다면 결국 numbers 배열의 없는 숫자들의 합과 동일하다.

알게된 점

  • 처음 문제를 풀 때 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도 줄어든다는 것을 기억하자!

profile
오늘은 오늘

0개의 댓글