Home BOJ.1377번 - 버블 정렬 프로그램 1
Post
Cancel

BOJ.1377번 - 버블 정렬 프로그램 1

📚 문제

2750번

💭 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
""" #! 이렇게 하면 시간 초과
import sys
 
# 명령의 수 N을 선언한다.
N = int(sys.stdin.readline())
A = [0] * N

for i in range(N):
    A[i] = int(sys.stdin.readline())

for i in range(N-1):
    flag = False
    for j in range(N-1-i):
        if A[j] > A[j+1]:
            flag = True
            temp = A[j]
            A[j] = A[j+1]
            A[j+1] = temp
    if flag == False:
        print("answer: ", A[i])
        break
"""

"""
이 경우, A는 [(10,0), (1,1), (5,2), (2,3), (3,4)]이고, sorted_A는 [(1,1), (2,3), (3,4), (5,2), (10,0)]가 됩니다.

각 원소의 이동 거리를 계산하면 다음과 같습니다:

	•	원소 1은 인덱스 1에서 인덱스 0으로 이동했으므로, 이동 거리는 1 - 0 = 1
	•	원소 2는 인덱스 3에서 인덱스 1으로 이동했으므로, 이동 거리는 3 - 1 = 2
	•	원소 3는 인덱스 4에서 인덱스 2로 이동했으므로, 이동 거리는 4 - 2 = 2
	•	원소 5는 인덱스 2에서 인덱스 3으로 이동했으므로, 이동 거리는 2 - 3 = -1
	•	원소 10은 인덱스 0에서 인덱스 4로 이동했으므로, 이동 거리는 0 - 4 = -4

여기서 가장 큰 이동 거리는 2입니다. 따라서 최적화된 버블 소트의 최종 결과는 최대 이동 거리인 2에 1을 더한 3입니다.
"""

import sys

N = int(sys.stdin.readline())
A = []

for i in range(N):
    A.append((int(sys.stdin.readline()),i))

Max = 0
sorted_A = sorted(A)

for i in range(N):
    if Max < sorted_A[i][1] - i: # sorted_A[i][1]은 정렬된 배열에서 원소가 원래 배열의 어느 위치에서 왔는지를 나타냄
        Max = sorted_A[i][1] - i # i는 정렬된 배열에서의 현재 인덱스
        
print(Max + 1)