PS

[백준/Python] (G5) 소트 - 1083

MSHUN 2024. 3. 7.
반응형

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번만큼 연속된 두 개의 원소만 교환할 수 있다. 

🤔느낀 점

굳...

Baekjoon Online Judge

반응형

댓글