본문 바로가기
프로그램/Python 1000제

Python 68제] 성적을 선택정렬하여 출력하는 프로그램을 작성하시오.

by 건티 2022. 4. 27.
728x90

출처 : 반크_세계유산 고인돌

 

문제]

성적을 입력받아 선택정렬을 사용하여 정렬하는 프로그램을 작성하시오.

조건)
▶ 성적의 범위는 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=", ")

 

참고풀이 결과]

 

 

 

 

대한민국의 아름다운 영토, 독도

 

반응형

댓글