Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 람다식과 reduce() 함수로 홀수 번 등장하는 숫자 찾기

사용자로부터 입력받은 양의 정수 배열이 주어졌을 때, 홀수 번 등장하는 숫자를 찾아야 합니다. 이 문제는 파이썬의 lambda 표현식과 functools.reduce() 함수를 조합하면 단 한 줄의 핵심 로직으로 간단하게 해결할 수 있습니다.

문제 예시

입력 : A=[2, 4, 7, 7, 4, 2, 2]
출력 : 2

위 예시에서 2는 세 번, 4와 7은 두 번씩 등장합니다. 따라서 홀수 번 등장하는 숫자는 2입니다.

알고리즘

  1. 배열의 요소를 입력받습니다.
  2. 람다(lambda) 표현식을 작성하고 적용합니다.
  3. 입력 리스트에 reduce 함수를 적용해 값 하나만 남을 때까지 반복합니다.
  4. 람다 표현식은 a ^ b(XOR 연산) 결과를 하나의 값으로 누적합니다.
  5. 초기값 a는 0부터 시작하고, b에는 리스트의 요소가 차례대로 전달됩니다.

XOR 연산이 동작하는 원리

이 방법이 성립하는 핵심은 XOR(배타적 논리합, ^) 연산의 특성입니다.

  • a ^ a = 0 : 같은 수를 두 번 XOR하면 0이 됩니다.
  • a ^ 0 = a : 어떤 수든 0과 XOR하면 자기 자신이 됩니다.

따라서 짝수 번 등장하는 숫자들은 서로 상쇄되어 사라지고, 최종적으로 홀수 번 등장한 숫자만 남게 됩니다.

예제 코드

# Python program to find the Number
# Occurring Odd Number of Times
# using Lambda expression and reduce function

from functools import reduce

def timeoccurrance(inp):
    print("RESULT ::>", reduce(lambda a, b: a ^ b, inp))

# Driver program
if __name__ == "__main__":
    A = list()
    n1 = int(input("Enter the size of the List ::"))

    print("Enter the Element of List ::")
    for i in range(int(n1)):
        k = int(input(""))
        A.append(k)
    timeoccurrance(A)

실행 결과

Enter the size of the List :: 7
Enter the Element of List ::
1
2
3
2
3
1
3
RESULT ::> 3

위 실행 결과에서 1과 2는 각각 두 번, 3은 세 번 등장했습니다. 짝수 번 등장한 1과 2는 XOR 과정에서 서로 상쇄되므로, 최종 결과로 3이 출력됩니다.