[Codility] OddOccurrencesInArray

Lesson 2 - Arrays : OddOccurrencesInArray

kotlin

첫 시도

1
2
3
fun solution(A: IntArray): Int {
return A.groupBy { it }.filter { it.value.size % 2 == 1 }.map { it.key }.first()
}

날먹 시도 실패 😩

두 번째 시도 : HashMap 이용

1
2
3
4
5
6
7
8
9
10
11
12
13
fun solution(A: IntArray): Int {
val hashMap = HashMap<Int, Int>()

A.forEach {
hashMap[it] = hashMap.getOrDefault(it, 0) + 1
}

hashMap.keys.forEach {
if (hashMap.getValue(it) % 2 == 1) return it
}

return -1
}

번외 : step을 이용한 비교

1
2
3
4
5
6
7
8
9
10
11
12
fun solution(A: IntArray): Int {
if (A.size == 1) return A[0]

A.sort()

for (i in A.indices step 2) {
if (i + 1 == A.size) return A[i]
if (A[i] != A[i + 1]) return A[i]
}

return -1
}

xor 연산 이용

1
2
3
4
5
6
7
8
9
fun solution(A: IntArray): Int {
var result = 0

A.forEach {
result = result xor it
}

return result
}

여러 방법으로 시도해도 효율성 테스트의 마지막 케이스가 실패했기에 검색을 해보니 비트 연산자를 활용하는 방법이 있었다!

xor 연산은 숫자가 같으면 0, 숫자가 다르면 1을 반환하기 때문에 중복되지 않은 요소를 찾아내는데 유용하다.

댓글