정수 배열이 주어졌을 때, 배열에는 중복된 요소가 포함될 수 있습니다. 이 글에서는 배열에서 고유한(distinct) 값만 골라서 화면에 출력하는 파이썬 프로그램을 만들어 보겠습니다.
예제
입력:: A = [1, 2, 3, 4, 2, 3, 5, 6] 출력:: [1, 2, 3, 4, 5, 6]
위 예제에서 2와 3은 배열 안에 두 번씩 등장하지만, 결과에는 각각 한 번만 표시됩니다.
알고리즘
- 배열의 요소를 입력받습니다.
- 배열의 요소를 하나씩 순서대로 선택합니다.
- 선택한 요소가 이전에 이미 출력되었는지 확인합니다.
- 플래그 변수를
0으로 초기화하여 사용합니다. 요소가 이미 출력된 적이 있으면 플래그를1로 설정하고, 처음 등장하는 요소라면0을 유지합니다. - 플래그가
0인 요소, 즉 중복되지 않은 고유 요소만 출력합니다.
예제 코드
# 주어진 배열의 모든 고유 요소를 출력하는 파이썬 프로그램
def distinctelement(A, n1):
print("고유 요소 목록 ::>")
for i in range(0, n1):
c = 0
for j in range(0, i):
if (A[i] == A[j]):
c = 1
break
if (c == 0):
print(A[i])
# 드라이버 코드
A = list()
n1 = int(input("리스트의 크기를 입력하세요 ::"))
print("리스트의 요소를 입력하세요 ::")
for i in range(int(n1)):
k = int(input(""))
A.append(k)
distinctelement(A, n1)
실행 결과
리스트의 크기를 입력하세요 ::4 리스트의 요소를 입력하세요 :: 1 2 2 4 고유 요소 목록 ::> 1 2 4
코드 설명
distinctelement() 함수는 배열과 그 크기를 매개변수로 받습니다. 바깥쪽 반복문(i)은 현재 검사 중인 요소를 가리키고, 안쪽 반복문(j)은 그 앞에 있는 모든 요소와 비교합니다.
현재 요소 A[i]가 앞선 요소 A[j]와 같다면 중복 요소이므로 플래그 c를 1로 설정하고 내부 반복문을 종료합니다. 반복문이 끝난 뒤에도 c == 0이라면 해당 요소는 처음 등장한 것이므로 출력합니다.
참고: 더 간단한 방법 — set() 활용하기
실무에서는 위와 같은 이중 반복문 대신 파이썬의 set() 자료형을 사용하면 한 줄로 중복을 제거할 수 있습니다.
A = [1, 2, 3, 4, 2, 3, 5, 6] print(list(set(A))) # [1, 2, 3, 4, 5, 6] (순서는 보장되지 않음)
단, set()은 원래의 입력 순서를 유지하지 않으므로 순서가 중요하다면 dict.fromkeys(A)를 활용하는 것도 좋은 방법입니다.
A = [1, 2, 3, 4, 2, 3, 5, 6] print(list(dict.fromkeys(A))) # [1, 2, 3, 4, 5, 6] (순서 유지)