๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/1377
1377๋ฒ: ๋ฒ๋ธ ์ํธ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. N์ 500,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ A[1]๋ถํฐ A[N]๊น์ง ํ๋์ฉ ์ฃผ์ด์ง๋ค. A์ ๋ค์ด์๋ ์๋ 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ ๋๋ 0์ด๋ค.
www.acmicpc.net
์ผ๋จ ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ฒ๋ธ์ ๋ ฌ์ ์์์ผํ๋ค. ๊ทธ๋์ ๋ฒ๋ธ์ ๋ ฌ ์ ๋ํด ๋จผ์ ์ ๋ฆฌํด ๋ณด์๋ค.
https://infinitt.tistory.com/228
๋ฒ๋ธ ์ ๋ ฌ (bubble sort)
* ๋ฒ๋ธ์ ๋ ฌ์ ๊ฐ๋
๋ ์ธ์ ํ ์์๋ฅผ ๊ฒ์ฌํ์ฌ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค. ์๊ฐ ๋ณต์ก๋๋ ๋๋ฆฌ์ง๋ง, ์ฝ๋๋ ๋จ์ํ๋ค. ๊ตํ์ ๋ ฌ์ ์ผ๋ถ์ ์ํ๋ค. ์์๊ฐ ์ด๋ํ๋ ๋ชจ์ต์ด ๊ฑฐํ์ด ์๋ฉด์๋ก ์ฌ๋ผ์ค๋ ๋ฏํ ๋ชจ์ต๊ณผ ๊ฐ..
infinitt.tistory.com
์๋ ์ฝ๋๋ ๋ฌธ์ ์์ ์ ์ํ C++์ฝ๋์ด๋ค.
bool change = false;
for (int i=1; i<=n+1; i++) {
change = false;
for (int j=1; j<=n-i; j++) {
if (a[j] > a[j+1]) {
change = true;
swap(a[j], a[j+1]);
}
}
if (change == false) {
cout << i << '\n';
break;
}
}
* ๋ฌธ์ ์ ์ฃผ์ด์ง TastCase๋ก ์ค๋ช
ํด๋ณด๋ฉด
๋ฒ๋ธ์ ๋ ฌ์ 1 ํ์ฐจ๊ฐ ๋๋ ๋๋ง๋ค ๊ฐ์ฅ ํฐ์๊ฐ ๋งจ ๋ค๋ก๊ฐ๋ค .
๋ฒ๋ธ์ ๋ ฌ์ ์งํํ๋ค๊ฐ, ์ ๋ ฌ์ ๋ง์น ์์ ์์ ๋ชํ์ฐจ์ธ์ง + 1 ๋ฅผ ์ถ๋ ฅํ๋ฉฐ break๋๋ค.
์ฆ, ์ ๋ ฌ์ด ์๋ฃ๋ ์์ ์ i + 1 ์ ์ถ๋ ฅํ๊ฒ ๋๋ค.
์ฌ๊ธฐ๊น์ง ์ดํดํ๋ค, ๊ทธ๋ฅ ๊ทธ๋๋ก ํ์ด์ฌ์ฝ๋๋ก ์ฎ๊ฒผ๋๋ ์๊ฐ์ด๊ณผ ๊ฐ ๋๋ค.
๋ฒ๋ธ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๋ O( n² ) ์ด๋ฏ๋ก 25๋ง์ ์๊ฐ๋ณต์ก๋์ด๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ๊ฒฐ๊ณผ์๋ค.
* ์๊ฐ์ด๊ณผ ์์ด ํ๊ธฐ ์ํด์
์ ๋ ฌ ์ ์ ์์๋ค์ ์ธ๋ฑ์ค ๊ฐ๊ณผ, ์ ๋ ฌ ํ์ ์์๋ค์ ์ธ๋ฑ์ค ๊ฐ์ ๋น๊ตํด๋ณธ๋ค๋ฉด, ๋ฒ๋ธ์ ๋ ฌ์์ ๋ช๋จ๊ณ๋ฅผ ๊ฑฐ์ณค๋์ง ์ ์ ์์๋ค.
์๋ฅผ๋ค์ด์ 3๊ฐ์ ์์๋ฅผ ๊ฐ์ง ๋ฆฌ์คํธ๋ก ์ค๋ช
ํด๋ณด๋ฉด, ์์ ์๊ฐ ์์, ๋ค์ ๋นจ๊ฐ์์ด ์ธ๋ฑ์ค๊ฐ ์ด๋ค.
5๋ ๋ค๋ก 2์นธ์ ์ด๋ํ๋ค.
3์ ์์ผ๋ก 1์นธ์ ์ด๋ํ๋ค.
1์ ์์ผ๋ก 1์นธ์ ์ด๋ํ๋ค.
์์ ์ฌ์ค๋ค์ ์ธ๋ฑ์ค๋ผ๋ฆฌ(๋นจ๊ฐ ์ซ์๋ผ๋ฆฌ) ๋บ์
์ ํด๋ณด๋ฉด ์์์ธ๊ฒฝ์ฐ๋ ๋ค๋ก ์ด๋, ์์์ธ ๊ฒฝ์ฐ๋ ์์ผ๋ก ์ด๋ํ ์นธ ์๊ฐ ๋์จ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ๋ค์ ์ต๋๊ฐ์ด ๋ฒ๋ธ์ ๋ ฌ์ด ๋ชํ์ฐจ๊น์ง ํ์ํ์ง๋ฅผ ๋ํ๋ด๊ฒ ๋๋ค. ์์ ์์์๋ +1์ด ์ต๋๊ฐ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด 1ํ์ฐจ๋ง ๋ฒ๋ธ์ ๋ ฌ์ ์คํํด๋ ์ ๋ ฌ์ด ๋๋ค๋ ์ด์ผ๊ธฐ์ด๋ค.
์ด๋ฌํ ์๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์๊ฐ์ด๊ณผ์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
๋ฐ๋ผ์ ๋ฌธ์ ์ ํ
์คํธ์ผ์ด์ค๋ก ๋ค์ ํ์ธํด๋ณด๋ฉด
+2๊ฐ ์ต๋๊ฐ์ด๋ฏ๋ก ๋ํ๊ธฐ 1์ ํด์ฃผ์ด์ +3์ ์ถ๋ ฅํ๋ฉด ๋ต์ด ๋๋ค.
๊ฐ๋
๋ง ์๋ค๋ฉด ์ฝ๋๊ตฌํ์ ์ด๋ ต์ง ์์๋ค.
* ํ์ด์ฌ (python) ์ฝ๋
import sys
input = sys.stdin.readline
n = int(input())
arr = []
for i in range(n):
arr.append( (int(input()), i) )
sorted_arr = sorted(arr)
answer = []
for i in range(n):
answer.append(sorted_arr[i][1] - arr[i][1])
print(max(answer) + 1)