공부/프로그래머스

[프로그래머스 Lv. 1] 없는 숫자 더하기 - JAVA

해니0 2024. 8. 25. 08:00

문제

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

class Solution {
    public int solution(int[] numbers) {
        int answer = -1;
        return answer;
    }
}

 

제한사항

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 해야 합니다.

 


문제 풀이

분석

0-9까지 범위가 고정되어있다.

배열을 정렬한 뒤에 뽑아낼 생각을 했는데 불필요한 로직이 들어갈 것 같다.

다 더한 후 빼는 방법을 생각했다.

 

내 풀이

 

class Solution {
    public int solution(int[] numbers) {
        int totalSum = 45;  
        int arraySum = 0;

        // numbers 배열의 합을 계산
        for (int number : numbers) {
            arraySum += number;
        }

        return totalSum - arraySum;
    }
}

 

다른 풀이

굳이 더한 후 빼는게 아니라 전체 값에서 빼는 방법이 더 간단하다.

class Solution {
    public int solution(int[] numbers) {
        int sum = 45;
        for (int i : numbers) {
            sum -= i;
        }
        return sum;
    }
}

 

 

Stream을 사용했다.

import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
        return 45-Arrays.stream(numbers).sum();
    }
}

 

import java.util.Arrays;
import java.util.stream.IntStream;

class Solution {
    public int solution(int[] numbers) {
            return IntStream.range(0, 10).filter(i -> Arrays.stream(numbers).noneMatch(num -> i == num)).sum();
        }
}

Lv.1  / Java / 월간 코드 챌린지 시즌3

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges