1. ๋ฌธ์ ์ค๋ช ๐
์์๋ก ๋์จ C++ ์ฝ๋๋ฅผ ๋์ผ๋ก๋ง ์ฝ์ด์๋ ์ดํด๊ฐ ์ด๋ ต๋ค. ๋ฐ๋ผ์ N๊ณผ A[] ๋ฐฐ์ด์ ๊ฐ๊ฐ ๊ฐ์ ๋ฃ์ด๋ณด๋ฉฐ ์๊ฐํด๋ณด๊ธธ ๋ฐ๋๋ค. ์ฝ๋์ ์ฃผ์ ๊ณจ์๋, ๋ฐ๋ณต Loop ์ค์์ ์ต์ด๋ก ์ด๋ ํ ์๋ SWAP
์ด ์ผ์ด๋์ง ์๋ Loop๋ ๋ช ๋ฒ์งธ๋? ๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค.
2. ์ ๊ทผ ๋ฐฉ์ ๐๏ธ
KEY WORD
: Bubble Sort
๋ฒ๋ธ ์ ๋ ฌ ์์ฒด๋ ์ฌ์ฉํ์ง ๋ชปํ๋ค. ์๋ํ๋ฉด ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ต๋ ๊ฐ์๊ฐ 500,000 ์ธ๋ฐ, O(N^2)์ธ ๋ฒ๋ธ ์ ๋ ฌ์ ์ด์ฉํ๋ฉด 10^9๋ฅผ ๋๊ฒจ ์๊ฐ์ด๊ณผ๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํด๋น ๋ฌธ์ ๋ Bubble Sort ์์ฒด๊ฐ ์๋๋ผ, Bubble sort์ด ์๋ํ๋ ๋ฐฉ์์ ๋ํ ์ ํํ ์ดํด๋ฅผ ํ์๋ก ํ๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฐฐ์ด์ด ์ฃผ์ด์ก์ ๋, ์ฒซ ๋ฒ์งธ Loop๋ฅผ ๋๋ฉฐ ๋ฒ๋ธ ์ํธ๋ฅผ ์งํํ๋ค๊ณ ํด๋ณด์. ๊ทธ ๊ฒฐ๊ณผ๋ 10์ด ์ต์ฐ๋จ์ผ๋ก ์๋ฆฌ๋ฅผ ์ด๋ํ์ ๊ฒ์ด๊ณ , ๋๋จธ์ง ๊ฐ๋ค์ ๋ชจ๋ ํ ์นธ์ฉ ์ผ์ชฝ
์ผ๋ก ์ด๋ํ์ ๊ฒ์ด๋ค.
๋ค์ 2 ๋ฒ์งธ Loop์์๋ 5๊ฐ 10์ ์ผ์ชฝ์ ์์นํ ๊ฒ์ด๊ณ , 2์ 3์ด ์ผ์ชฝ์ผ๋ก ์ด๋ํ์ ๊ฒ์ด๋ค.
์ดํ 3๋ฒ์งธ Loop์์๋ ์ด๋ ํ SWAP๋ ์ผ์ด๋์ง ์์. ๋ต์ 3์ด ๋๋ค.
์์์์ ์ดํด๋ณด์๋ค์ํผ, SWAP์ด ์ผ์ด๋ LOOP์์๋ ์ต์ ํ๋์ ๊ฐ์ด ์ผ์ชฝ์ผ๋ก ์์ง์ธ๋ค. ๋ฐ๋ผ์ ์์๋ค ์ค ๊ฐ์ฅ ๋ง์ด ์ผ์ชฝ์ผ๋ก ์์ง์ธ ํ์๊ฐ ๊ณง SWAP์ด ์ผ์ด๋ LOOP์ ์ต์ข ๊ฐ์๊ฐ ๋ ๊ฒ์ด๊ณ , ์ฌ๊ธฐ์ +1์ ๋ํ ๊ฒ์ด ์ต์ด๋ก LOOP๊ฐ ์ผ์ด๋์ง ์์ LOOP์ ๋ฒํธ๊ฐ ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ํ์ด๋ฅผ ํฐ ํ๋ฆ์ ๋ฐ๋ผ ์ ์ด๋ณด๋ฉด,
- ์ ๋ ฅ ๋ฐ์ ์์๋ค์ ์ต์ด INDEX๋ฅผ ์ ์ด๋๋ค.
- JAVA ๋ด๋ถ ์ ๋ ฌ ํ์ฉ (์๊ฐ๋ณต์ก๋ O(nlogn))ํ์ฌ ๊ฐ์ ์ ๋ ฌํ๋ค.
์ ๋ ฌ ํ index
-์ต์ด index
== ์ผ์ชฝ์ผ๋ก ์ด๋ํ ํ์ ์์ผ๋ก ์ด๊ฒ์ ์ต๋๊ฐ์ ๊ตฌํ๋ค.- ํด๋น ์ต๋๊ฐ + 1 ์ ์ถ๋ ฅํ๋ค.
๋ค์์ ํด๋น ์ ๊ทผ ๋ฐฉ์์ ๋ํ์ฌ ์๊ธธ ์ ์๋ ์๋ฌธ์ ๊ณผ ๊ทธ์ ๋ํ ๋์ ์๊ฐ์ ์ ๊ฒ ๋ค.
(1) ์ผ์ชฝ ์ด๋ ํ์๊ฐ ์ค์ฒฉ๋๋ค๋ ๊ฒ์ ์ด๋ป๊ฒ ํ์ ํ๋? ๐ค
ํด๋น ํ์ด๋ ์ผ์ชฝ ์ด๋ ํ์ ์ค ์ต๋๊ฐ == SWAP LOOP์ ๊ฐ์๋ผ๊ณ ๊ฐ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ํ๊ณ ์๋ค. ํ์ง๋ง '๋ง์ฝ 10๊ฐ์ ์์ ๋ํด์, Loop 1์์๋ 1-3์ index์์๋ง swap์ด ์ผ์ด๋๊ณ , Loop 2์์๋ 7-9์์๋ง SWAP์ด ์ผ์ด๋๋ ๊ฒ๊ณผ ๋ถ๋ถ์ ์ธ ์ด๋์ด ๊ฐ๋ฅํ์ง ์๋๊ฐ?' ํ๋ ์๋ฌธ์ด ๋ค ์ ์๋ค.
ํ์ง๋ง ์ด๋ ๋ถ๊ฐ๋ฅํ๋ค. ์๋ํ๋ฉด, ๋ง์ฝ ๋ฐฐ์ด์ ์์ ์ค ๋ถ๋ถ์ ์ผ๋ก SWAP์ด ํ์ํ๋ค๊ณ ํ๋๋ผ๋ ํด๋น SWAP์ ๋์์
์ผ์ด๋๊ธฐ ๋๋ฌธ์ด๋ค. ์์๋ฅผ ๋ค์ด๋ณด๊ฒ ๋ค.
[5, 4, 3, 2, 1, 10, 9, 8, 7, 6]
์ด๋ ๊ฒ ์๋ค๊ณ ํ์. ํด๋น ๋ฐฐ์ด์ 5๊ฐ ๋ฐฐ์ด์ ์ค์์ ์ค๋ SWAP๊ณผ 10์ด ๋ฐฐ์ด ๋์ผ๋ก ๊ฐ๋ SWAP์ด ๋์์ ์ผ์ด๋๋ค.
์ ์์์ ๊ฐ์ด ํน์ ๋ถ๋ถ ๋ด์์์ ์ด๋์ ํญ์ ๋์์
์ผ์ด๋๋ ๊ฒ์ด ๋ณด์ฅ๋จ์ผ๋ก, ์ต๋ ์ค์ฒฉ์ด ๊ณง SWAP LOOP์ ๊ฐ์์์ ๋ณด์ฅํ ์ ์๋ค.
3. ์ฝ๋ ์๊ฐ ๐
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
/*
* 1377 ๋ฒ๋ธ ์ํธ
* (1) ๋ชจ๋ ์์์ ์๋ index๋ฅผ ์ ์ฅ
* (2) ๋ชจ๋ ์์์ ์ ๋ ฌ ํ index๋ฅผ ๊ตฌํ๋ค.
* (3) (1) - (2) ์ค ์ต๋๊ฐ์ ๊ตฌํ๋ค.
* (4) ์ต๋๊ฐ + 1์ ์ถ๋ ฅํ๋ค.
* */
public static void main(String[] args) throws IOException {
int answer = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Num [] nums = new Num[N];
for (int i = 0; i < N; i++) {
nums[i] = new Num(i, Integer.parseInt(br.readLine()));
}
Arrays.sort(nums, Comparator.comparingInt(o -> o.v));
for (int i = 0; i < N; i++) {
if(i < nums[i].i) answer = Math.max(answer, nums[i].i - i);
}
System.out.println(answer+1);
}
}
class Num {
int i;
int v;
public Num(int i, int v){
this.i = i;
this.v = v;
}
}
4. ๋ฐฐ์ด ๊ฒ ๐ฏ
ํ... ๋ ๋ฒ์งธ ํ์ด์๋๋ฐ, ์ค์ค๋ก ํ์ง ๋ชปํ๋ค. ๋๋ ์๊ฐ์ ๋ฐฉํฅ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ ๊ฐ์ ๊ฐ์๋ฅผ ์ธ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค. ์๋ํ๋ฉด SWAP์ด ์ผ์ด๋ฌ๋ค๋ฉด ์ต์ ํ๋์ ๊ฐ์ด ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ด๊ฒ์ ๋๊ฐ์ง ์ด์ ์์ ๋ต์ด ๋ ์ ์๋ค.
- (1) ์ ์์ ์ฒ๋ผ ๋ถ๋ถ์ ์ธ ์ด๋์ด ๋์์ ์ผ์ด๋ ๋, ์ด๋ฌ๋ฉด Loop๋ ํ๋์๋๋ฐ, ์์ง์ธ ์๋ 2๊ฐ๋ผ ๊ณ์ฐ์ด ์๋๋ค.
- (2) ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ ๊ฐ์ ๋ค์ Loop์์ ๋ฐ๋ ค๋ ์ ์์.
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
์ ์์๋ก ๋ณด๋ฉด SWAP์ด ์ผ์ด๋ LOOP๋ ์ด 10๊ฐ ์ด์ง๋ง, ๋ด ์๋ชป๋ ํ์ด๋ก ๊ณ์ฐํ๋ฉด 6๋ฒ์ด ๋์จ๋ค. ์๋ํ๋ฉด5~2
๋ถ๋ถ์ด ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ์ผ๋, ๋ฐฐ์ด์ ์ต์ข๋จ์์ ์์ํด์ ์ต์ด index ์์น์ ๋น๊ตํ๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ ๊ฒ์ด ์๋๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.