반응형
Baekjoon Online Judge의 1083번 소트 문제의 Python풀이입니다.
1083번: 소트
크기가 N인 배열 A가 있다. 배열에 있는 모든 수는 서로 다르다. 이 배열을 소트할 때, 연속된 두 개의 원소만 교환할 수 있다. 그리고, 교환은 많아봐야 S번 할 수 있다. 이때, 소트한 결과가 사전
www.acmicpc.net
💻코드
def maximize_number(e, S):
# e의 길이를 n에 할당
n = len(e)
# 배열의 모든 요소에 대해 반복
for i in range(n):
max_pos = i # 현재 최대 값의 위치를 i로 초기화
# i에서 시작하여 S+1만큼 떨어진 범위 내에서 최대값 탐색
for j in range(i + 1, min(i + S + 1, n)):
# 현재 요소가 이전 최대값보다 크면 위치 업데이트
if e[j] > e[max_pos]:
max_pos = j
# 최대 값의 위치가 현재 위치보다 앞선 경우, 최대값을 앞으로 이동
while max_pos > i:
# 인접한 요소와 스왑
e[max_pos], e[max_pos - 1] = e[max_pos - 1], e[max_pos]
max_pos -= 1 # 최대 위치 업데이트
S -= 1 # 사용 가능한 스왑 횟수 감소
if S == 0: # 더 이상 스왑할 수 없으면 배열 반환
return e
# 모든 최적화가 완료되면 최종 배열 반환
return e
# 사용자 입력 처리 부분
input() # 첫 번째 입력(배열의 길이)은 사용하지 않음
e = list(map(int, input().split())) # 배열을 입력 받음
S = int(input()) # 스왑 가능한 횟수를 입력 받음
print(*maximize_number(e, S)) # 최대화된 배열을 출력
🧠풀이
S번만큼 연속된 두 개의 원소만 교환할 수 있다.
🤔느낀 점
굳...

반응형
댓글