<aside> 💬 lv0, 비트 조작

단일 숫자 찾기

문제 설명

정수로 이루어진 배열이 주어집니다. 이 배열에서 정확히 한 번만 나타나는 숫자를 찾아 반환하는 코드를 작성해주세요. 모든 숫자는 정확히 두 번 나타나는데, 오직 하나의 숫자만 한 번만 나타납니다.


제한 사항


입출력 예

입력 (배열) 출력 (한 번만 나타나는 숫자)
[4, 1, 2, 1, 2] 4
[2, 2, 1] 1

입출력 설명

배열 내에서 오직 한 번만 나타나는 숫자를 찾아 반환합니다. 예를 들어, 첫 번째 예시에서는 4가 한 번만 나타나므로 4를 반환합니다.

</aside>

😺 풀이 1. XOR 연산, 비트 조작

def solution(nums): **#1 함수 정의**
    result = 0 **#2 XOR 연산 결과 초기화**
    for num in nums: **#3 숫자 탐색**
        result ^= num **#4 XOR 연산 진행**
    return result **#5 고윳값 반환**

단계별 풀이 전략

  1. 함수 정의

    코드의 첫 부분에서 solution이라는 함수를 정의합니다. 이 함수는 하나의 인자 nums를 받습니다. nums는 오직 한 번만 나오는 단 하나의 숫자를 찾을 대상이 되는 배열입니다.

  2. XOR 연산 결과 초기화

    XOR 연산 결과 result에 초깃값으로 0을 할당합니다.

  3. 숫자 탐색

    배열 내 숫자를 num 변수에 할당하여 차례대로 숫자를 탐색합니다.

  4. XOR 연산 진행

    result ^= num과 같이 XOR 연산을 진행하여 현재 탐색 숫자 num 이 기존에 나온 숫자와 겹치지는 않은지 연산을 진행합니다. 연산 방식은 비트를 이용해서 진행하며, 비트를 기준으로 현재 num의 비트 전체가 result의 비트의 일부와 겹친다면 현재 탐색 숫자가 기존에 나온 숫자와 중복됩니다. 그러면 result의 비트에서 num의 비트가 빼져서 기존 숫자가 상쇄됩니다. 갱신된 result의 비트는 10진수 값으로 반환됩니다.

    반면, num의 비트가 result의 비트와 겹치지 않는다면 result의 비트에 num의 비트를 추가하고, 갱신된 result의 비트를 10진수 값으로 반환합니다.

  5. 고윳값 반환

    for 문을 통해 모든 탐색 숫자는 XOR 연산이 진행되어 비트 조작으로 고윳값은 추가되고, 중복 값은 상쇄됩니다. 그 결과, 최종적으로 result는 배열 nums에서 오직 한 번만 나오는 단 하나의 숫자가 됩니다. 이러한 result를 고윳값으로 반환합니다.

알아둬야 할 개념

XOR 연산과 비트 조작

풀이 2. set, 탐색

def solution(data): **#1 함수 정의**
    uniq_d = set(data) **#2 고윳값 리스트 생성**

    for num in uniq_d: **#3 고윳값 탐색**
        num_count = data.count(num) **#4 배열 내 탐색 숫자의 개수**
        if num_count == 1: **#5 실제 고윳값의 조건 정의**
            return num **#6 실제 고윳값 반환** 

단계별 풀이 전략

  1. 함수 정의

    코드의 첫 부분에서 solution이라는 함수를 정의합니다. 이 함수는 하나의 인자 data를 받습니다. data는 오직 한번만 나오는 단 하나의 숫자를 찾을 대상이 되는 배열입니다.

  2. 고윳값 리스트 생성

    set(data)와 같이 set 함수를 이용하여 data 배열에서 중복되는 값들을 제거하고 고유한 값들만 남깁니다. 이렇게 생성된 고윳값 리스트를 uniq_d라는 변수에 할당합니다.

  3. 고윳값 탐색

    하지만 고윳값 리스트에 존재한다고 하더라도 기존 배열 data에서 중복되는 값이 존재할 수 있습니다. 그러한 이유로 고윳값 리스트의 고윳값을 num 변수에 할당하여 순차적으로 탐색합니다.

  4. 배열 내 탐색 숫자의 개수

    배열 data에 count 메서드를 이용하여 배열 내 탐색 숫자 num이 몇 개 존재하는 지 구하고 그 결과를 num_count 변수에 할당합니다.