모각코/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 함수를 통해 간결하게 작성했다.