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되어 남게 된다.
따라서 최종적으로 없는 숫자만 더해지게 된다.
'오늘의 코딩 테스트' 카테고리의 다른 글
오늘의 코딩 테스트(수박수박수박수박수박수?) (0) | 2025.02.19 |
---|---|
오늘의 코딩 테스트(가운데 글자 가져오기) (0) | 2025.02.18 |
오늘의 코딩 테스트(핸드폰 번호 가리기)와 과제 진행 시 문제가 되었던 부분 (0) | 2025.02.12 |
오늘의 코딩 테스트(Collatz 추측) (0) | 2025.02.07 |
오늘의 코딩 테스트 (0) | 2025.01.27 |