출처 : 반크_세계유산 고인돌
문제]
성적을 입력받아 선택정렬을 사용하여 정렬하는 프로그램을 작성하시오.
조건)
▶ 성적의 범위는 0<=N<=100으로 한다.
▶ 범위 밖 수가 입력되면 다시 입력한다.
▶ 음수가 입력되면 입력을 완료하고 정렬된 자료를 출력한다.
입력 예시1)
1번째 성적을 입력하시오 : 789
0~100사이의 수가 아닙니다.
다시 입력하세요...
1번째 성적을 입력하시오 : 78
2번째 성적을 입력하시오 : 89
3번째 성적을 입력하시오 : 98
4번째 성적을 입력하시오 : 56
5번째 성적을 입력하시오 : 64
6번째 성적을 입력하시오 : 75
7번째 성적을 입력하시오 : 85
8번째 성적을 입력하시오 : 80
9번째 성적을 입력하시오 : -1
출력 예시1)
정렬 전 자료 : 78, 89, 98, 56, 64, 75, 85, 80
정렬 후 자료 : 56, 64, 75, 78, 80, 85, 89, 98
참고풀이]
#자료 입력
L=[]
i=0
while True:
i+=1
N=int(input(str(i)+"번째 성적을 입력하시오 : "))
if N<0:
break
if 0<=N<=100:
L.append(N)
else:
print("0~100사이의 수가 아닙니다.")
print("다시 입력하세요...")
i-=1
#원본자료를 정렬할 리스트로 입력한다.
L_Select=[]
for n in L:
L_Select.append(n)
#선택정렬한다.
last=len(L_Select)-1
while last>0:
#리스트 중 제일 큰 수를 찾아 그 위치를 구한다.
Max=max(L_Select[:last+1])
for i in range(0,last+1):
if Max==L_Select[i]:
MaxIndex=i
break
#리스트 last에 리스트 위치의 값과 교환한다.
temp=L_Select[last]
L_Select[last]=L_Select[MaxIndex]
L_Select[MaxIndex]=temp
#last를 하나 감소한다.
last-=1
#결과 출력한다.
print("\n정렬 전 자료 : ",end='')
for n in range(len(L)):
if (n+1)==len(L):
print(L[n])
else:
print(L[n],end=', ')
print("정렬 후 자료 : ",end="")
for n in range(len(L_Select)):
if (n+1)==len(L_Select):
print(L_Select[n])
else:
print(L_Select[n],end=", ")
참고풀이 결과]
대한민국의 아름다운 영토, 독도
'프로그램 > Python 1000제' 카테고리의 다른 글
Python 70제] 삽입정렬을 사용하여 오름차순 프로그램을 작성하시오. (0) | 2022.04.29 |
---|---|
Python 69제] 점수에 대한 학점을 출력하는 프로그램을 작성하시오. (0) | 2022.04.27 |
Python 67제] 1~100까지 수 중 소수 출력하는 프로그램을 작성하시오. (0) | 2022.04.26 |
Python 66제] 숫자 마름모 출력하는 프로그램을 작성하시오. (0) | 2022.04.25 |
Python 65제] 4X4 마방진 프로그램을 작성하시오. (0) | 2022.04.21 |
댓글