오늘의 코딩 테스트

오늘의 코딩 테스트(없는 숫자 더하기)

oceanflow 2025. 2. 14. 23:19

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

 

제한 사항

1 <= numbers의 길이 <= 9

0 <= numbers의 모든 원소 <= 9

numbers의 모든 원소는 서로 다릅니다.

 

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

 

0부터 9까지 다 더한 값에서 numbers의 값을 for 문을 돌려 빼주어 해결하였다.

 

또 다른 방법들이 있는데

비트 연산과 불리언 배열을 이용한 방법이다.

 

그 중 비트 연산을 이용하는 방법은 다음과 같다.

class Solution {
    public int solution(int[] numbers) {
        int result = 0;
        
        // 1단계: 0-9까지 모든 숫자와 XOR
        for (int i = 0; i <= 9; i++) {
            result ^= i;
        }
        
        // 2단계: numbers 배열의 모든 숫자와 XOR
        for (int num : numbers) {
            result ^= num;
        }
        
        return result;
    }
}

 

첫 번째 반복문에서

0부터 9까지 모든 숫자를 XOR연산 하게 된다.

result에는 0부터 9까지의 모든 숫자가 XOR된 값이 저장되게 된다.

 

그럼 result에는 0^1^2^3^4^5^6^7^8^9 이 값이 들어가 있을 것이다.

 

두 번째 반복문은

numbers 배열에 있는 숫자들을 다시 XOR 연산한다.

numbers에 있는 숫자들은 두 번 XOR되어서 0이 되고

만약 numbers =[1, 2, 3] 이면

result ^= 1; // 첫 번째 반복 result ^= 2; // 두 번째 반복 result ^= 3; // 세 번째 반복

numbers에 없는 숫자들만 한 번 XOR되어 남게 된다.

 

따라서 최종적으로 없는 숫자만 더해지게 된다.