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

리스트가 빌 때까지 세 번째 요소를 제거하고 출력하는 Python 프로그램

이 글에서는 리스트가 완전히 비워질 때까지 매번 세 번째 요소를 제거하고 그 값을 출력하는 파이썬 프로그램을 다룹니다. 먼저 리스트를 생성하는데, 리스트의 인덱스는 0부터 시작하므로 첫 번째 세 번째 요소는 위치 2에 있습니다. 핵심은 리스트가 빌 때까지 순회하면서 매번 다음 세 번째 요소의 인덱스를 계산하고, 해당 값을 출력한 뒤 리스트의 길이를 하나씩 줄여나가는 것입니다.

참고로 이 문제는 원형으로 배치된 대상 중 매번 k번째를 제거해 나가는 유명한 '요세푸스 문제(Josephus Problem)'에서 k=3인 경우와 동일한 방식으로 해결할 수 있습니다.

예시

A:[10,20,30,40]
출력 결과: 30 20 40 10

설명

첫 번째 세 번째 요소는 30입니다. 그다음에는 제거된 지점의 다음 요소인 40부터 다시 세어 두 번째로 제거할 요소 20을 찾습니다. 이어서 다시 40부터 셋 때 세 번째가 되는 요소는 40 자신이며, 마지막으로 10이 출력됩니다.

알고리즘

1단계: 리스트의 인덱스는 0부터 시작하며, 첫 번째 세 번째 요소는 위치 2에 있습니다.

변수 p = 2, 시작 인덱스 id = 0

2단계: 리스트의 길이를 구합니다.

listlen = len(LST)    // 리스트(LST)의 길이

3단계: 리스트가 비워질 때까지 반복하면서 매번 다음 세 번째 요소의 인덱스를 찾습니다.

While(listlen > 0)
   Id = (p + id) % listlen
   A = LST.pop(id)    // 해당 요소를 제거하고 출력
   Listlen -= 1
End while

여기서 핵심 식은 (p + id) % listlen입니다. 현재 인덱스에 간격 p를 더한 뒤 남은 리스트 길이로 나눈 나머지를 구하면, 리스트 끝에 도달했을 때 다시 처음으로 돌아가는 원형 순회를 간단하게 구현할 수 있습니다.

예제 코드

# 리스트가 빌 때까지 매번 세 번째 요소를 제거하는 함수
def removenumber(no):
   # 리스트 인덱스는 0부터 시작하므로
   # 첫 간격은 3 - 1 = 2
   p = 3 - 1
   id = 0
   lenoflist = len(no)

   # 리스트가 비면 반복 종료
   while lenoflist > 0:
      id = (p + id) % lenoflist

      # 해당 요소를 제거하면서 출력
      print(no.pop(id))
      lenoflist -= 1

# 드라이버 코드
A = list()
n = int(input("Enter the size of the array ::"))
print("Enter the INTEGER number")
for i in range(int(n)):
   p = int(input("n="))
   A.append(int(p))
print("After remove third element, The List is")
removenumber(A)   # 함수 호출

실행 결과

Enter the size of the array ::9
Enter the number
n=10
n=20
n=30
n=40
n=50
n=60
n=70
n=80
n=90
After remove third element, The List is
30
60
90
40
80
50
20
70
10

실행 결과에서 볼 수 있듯이, 9개의 요소를 가진 리스트에서 먼저 30, 60, 90이 차례로 제거되고, 이후 남은 요소들을 대상으로 같은 규칙이 반복 적용되어 리스트가 완전히 빌 때까지 출력이 이어집니다.