공부/알고리즘
[python] Codility Lesson 2-2. OddOccurrencesInArray
richpark
2021. 7. 23. 21:57
1. 문제 잘못읽어 5시간 날린 코드
odd 넘버의 갯수가 하나인줄 알고 5시간 끙끙 앓다가 열받아서 테스트 케이스 print한뒤 기절할뻔했다. odd 넘버의 갯수가 하나가 아니였다...
def solution(A):
# write your code in Python 3.6
A.sort()
print(A)
if len(A) == 1:
return A[0]
for i in range(len(A)):
if i == len(A)-3:
return A[-1] #y
if A[i] == A[i+1]: #y
continue
else:
if A[i+1] == A[i+2]:
if i == 0:
return A[0]
continue
else:
return A[i+1]
2. 수정한 정답 코드
def solution(A):
# write your code in Python 3.6
A.sort()
if len(A) == 1:
return A[0]
for i in range(0, len(A), 2):
if i == len(A)-1:
return A[i]
if A[i] == A[i+1]:
continue
else:
return A[i]
1. sort 메서드를 통해 정렬,
2. list의 크기까지 2씩 index 증가
3. A[index] 와 A[index+1] 비교로 odd넘버 detect
4. 예외상황 (크기가 1인 리스트, 마지막에 odd number 오는경우 고려...)
3. 뭔가 아쉽기도하고, 남들은 어떻게 풀었나 확인해보았다.
(출처 : https://wayhome25.github.io/algorithm/2017/04/30/OddOccurrencesInArray/)
def solution(A): return reduce(lambda x,y: x^y, A)
이 문제에서 ^ 연산자를 사용한다는 생각하는게 너무 참신하고 신기하다 ㅠㅠ
XOR -> 같을 때 0, 다를 때 1
(출처 : https://hwan-shell.tistory.com/23)
int solution(int A[], int N) {
int i, result = 0;
for(i = 0; i < N; i++)
result ^= A[i];
return result;
}
위와 마찬가지로 key_point ^ 연산자로 구현한 코드이다.
728x90