문제
버블 소트 알고리즘을 다음과 같이 C++로 작성했다.
bool changed = false;
for (int i=1; i<=N+1; i++) {
changed = false;
for (int j=1; j<=N-i; j++) {
if (A[j] > A[j+1]) {
changed = true;
swap(A[j], A[j+1]);
}
}
if (changed == false) {
cout << i << '\n';
break;
}
}
위 소스에서 N은 배열의 크기이고, A는 정렬해야 하는 배열이다. 배열은 A[1]부터 사용한다.
위와 같은 소스를 실행시켰을 때, 어떤 값이 출력되는지 구해보자.
입력
첫째 줄에 N이 주어진다. N은 500,000보다 작거나 같은 자연수이다.
둘째 줄부터 N개의 줄에 A[1]부터 A[N]까지 하나씩 주어진다.
A에 들어있는 수는 1,000,000보다 작거나 같은 자연수 또는 0이다.
출력
정답을 출력한다.
정답
import sys
input = sys.stdin.readline
N = int(input())
# int형식으로 데이터를 입력받음
A = []
# A라는 리스트의 빈칸을 만듬
for i in range(N):
A.append((int(input()), i))
# A라는 리스트의 빈칸에 append(추가)를 하여 int형식의 데이터를 입력 받는다.
Max = 0
sorted_A = sorted(A)
# 입력받은 A를 정렬시킨다.
for i in range(N):
if Max < sorted_A[i][1] - i:
Max = sorted_A[i][1] - i
print(Max + 1)
'Coding_Test > Python Code Review' 카테고리의 다른 글
[백준-11399] ATM (1) | 2023.11.01 |
---|---|
[백준-1427] 소트인사이드 (0) | 2023.11.01 |
[백준-2750] 수 정렬하기(슈도코드) (0) | 2023.10.30 |
[핵심요약] 정렬의 종류 (1) | 2023.10.30 |
[백준-11286] 절댓값 힙 구현하기 (1) | 2023.10.27 |