비어있지 않은 정수 배열 A가 주어진다. 배열 A는 홀수 개의 원소로 이루어져 있으며,
각 원소는 동일한 값을 가진 다른 원소와 짝을 이룰 수 있다.
단, 단 하나의 원소만 짝을 이루지 못하고 남게 된다.
예를 들어, 배열 A가 다음과 같다고 하자:
A[0] = 9 A[1] = 3 A[2] = 9
A[3] = 3 A[4] = 9 A[5] = 7
A[6] = 9
- 인덱스 0과 2의 원소는 값 9로 짝을 이룸
- 인덱스 1과 3의 원소는 값 3으로 짝을 이룸
- 인덱스 4와 6의 원소는 값 9로 짝을 이룸
- 인덱스 5의 원소 7은 짝이 없으므로 남게 됨
따라서 이 배열에서 짝을 이루지 못하는 원소는 7이다.
다음 함수를 작성하라:
class Solution {
public int solution(int[] A);
}
이 함수는 위 조건을 만족하는 정수 배열 A가 주어졌을 때,
짝을 이루지 못한 원소의 값을 반환해야 한다.
예시:
A = [9, 3, 9, 3, 9, 7, 9]
반환값: 7
조건:
- N은 [1..1,000,000] 범위의 홀수 정수
- 배열 A의 각 원소는 [1..1,000,000,000] 범위의 정수
- 배열 A의 모든 값은 짝수 번 등장하며, 단 하나의 값만 홀수 번 등장한다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public class OddOccrurrencesInArray
{
public int solution(int[] A)
{
/*
XOR 연산 규칙:
a ^ a = 0(같은 값 두 번 XOR → 소거됨)
a ^ 0 = a(0과 XOR하면 자기 자신)
XOR 연산은 순서와 그룹에 상관없음.
*/
int unpaired = 0;
// 배열 돌며 XOR 연산 수행
foreach (int number in A)
{
// 현재까지의 결과(unpaired)와 배열 원소(number)를 XOR
unpaired ^= number;
// - 같은 값이 두 번 나오면: a ^ a = 0
// - 0과 어떤 값을 XOR 하면: 0 ^ a = a
// => 결국 짝수 번 등장한 값들은 모두 사라지고,
// 홀수 번 등장한 단 하나의 값만 남는다.
}
// 최종적으로 남은 값이 짝을 이루지 못한 원소
return unpaired;
}
}
|
cs |
'코딜리티 > Lesson' 카테고리의 다른 글
| TapeEquilibrium (누적합 + 이항) (0) | 2025.09.15 |
|---|---|
| PermMissingElem (등차수열) (0) | 2025.09.14 |
| FrogJmp (0) | 2025.09.14 |
| CyclicRotation (배열 회전) (0) | 2025.09.13 |
| BinaryGap (이진 갭) (0) | 2025.09.13 |