모각코/2023 하계 모각코
0712 모각코 1회차
s.e.s
2023. 7. 12. 14:16
계획: 코딩테스트 문제 풀이
문제 1
수열 A[1], A[2], ... A[N] 중 한 개의 수를 제외하고 나머지는 모두 같다. 해당 수의 위치를 구하시오.
C++
#include <iostream>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int N;
cin >> N;
int arr[N];
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
int index;
int value = arr[0];
for (index = 1; index < N; index++) {
if ((value ^ arr[index]) != 0)
break;
}
if (index == 1 && arr[1] == arr[2])
index = 0;
cout << index + 1 << "\n";
}
return 0;
}
처음엔 인덱스를 통해 순회하면서 직접 == 연산자로 값을 비교하는 방식으로 풀이했다.
다른 방법을 생각해보다가 XOR 연산자가 떠올랐다.
XOR의 경우 같은 비트는 0, 다른 비트는 1로 계산되므로 두 숫자가 같다면 0, 다르면 0이 아닌 값으로 연산 결과가 나올 것이다.
성능에서 유의미한 차이가 나는지는 모르겠다.
Python
T = int(input())
for _ in range(T):
N = int(input())
A = list(map(int, input().split()))
index = next((i + 1 for i in range(N - 1) if A[i] != A[i + 1]), N)
if index == 1 and A[1] == A[2]:
index = 0
print(index + 1)
리스트 컴프리헨션과 next 함수를 통해 간결하게 작성했다.