๋ฐฑ์ค 10989๋ฒ ๋ฌธ์ ๋ฅผ ํ ๋, ๊ทธ๋ฅ Arrays.sort()๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์์๋ค.
์ดํ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ป๊ฒ ํ์๋ ์ฐพ์๋ณด๊ณ ์นด์ดํ ์ ๋ ฌ์ ์ด์ฉํด ๋ฌธ์ ํ์ด๋ฅผ ๋ค์ ํ๊ฒ ๋์๋ค.
Arrays.sort()์ BuffedReader๋ฑ์ ์ฌ์ฉํ์ ๋ ๋ฉ๋ชจ๋ฆฌ 345476KB, ์๊ฐ์ด 2616ms ๊ฑธ๋ ธ์๋๋ฐ
์นด์ดํ ์ ๋ ฌ์ ์ด์ฉํด์ ๋ฌธ์ ํ์ด๋ฅผ ํ๋๊น ๋ฉ๋ชจ๋ฆฌ์ ์๊ฐ ๋ชจ๋๊ฐ ์ค์ด๋ค์๋ค.
์ฒ์์ ์นด์ดํ ์ ๋ ฌ์ด ๋ญ์ง ๋ชฐ๋ผ์ ์ดํดํ๋๋ฐ ์๊ฐ์ด ์ข ๊ฑธ๋ ธ์ด์ !
๊น๋จน๊ธฐ ์ ์ ์ ๋ฆฌํด๋๋ ค๊ณ ํ๋ค.
์นด์ดํ ์ ๋ ฌ์ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ช ๋ฒ ๋์๋์ง๋ฅผ ์ธ์ฃผ๋ ๊ฒ์ด๋ค.
๋ฌธ์ ๋ก ์ดํดํ๋ฉด
5, 2, 3, 1, 4, 2, 3, 5, 1, 7 ์ด ์ ๋ ฅ์ผ๋ก ๋ค์ด์ฌ ๋,
int[] arr = new int[10001]; // ์ฃผ์ด์ง๋ ์๋ค์ด 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์ด๋ฏ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ 10001๋ก ์ง์
for (int i = 0; i < n; i++) {
arr[Integer.parseInt(br.readLine())]++;
}
arr[5]++; arr[2]++; ์ด๋ฐ์์ผ๋ก ์ฆ๊ฐ์์ผ์ฃผ๋๋ฐ, ์ด ๋ฐ๋ณต๋ฌธ์ด ๋๋๋ฉด
arr[5]์๋ ์ ๋ ฅ๋ค ์ค 5๊ฐ ๋์จ ํ์๊ฐ ์นด์ดํ ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ arr๋ฐฐ์ด์๋ ๊ฐ index๊ฐ ๋ช๋ฒ ๋์๋์ง๊ฐ ๊ฐ์ผ๋ก ๋ค์ด์๊ฒ๋๋ค.
์ดํ์
for(int i = 1; i <10001; i++) {
while(arr[i] > 0) {
bw.wrtie(i+"\n");
arr[i]--;
}
}
for๋ฌธ์ด 1๋ถํฐ ๋๊ธฐ ๋๋ฌธ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ด ๋์ด ์ถ๋ ฅ๋๊ณ ,
arr[i]๊ฐ 0๋ณด๋ค ํฌ๋ค๋ ๊ฒ์ ์ ๋ ฅ์ ๋ฐ์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅํ๊ณ
์ ๋ ฅ๋ ์๊ฐ ํ๋ฒ ๋์จ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ๋ฒ (1์ด 2๋ฒ ์ ๋ ฅ) ๋์์ ์ ์๊ธฐ ๋๋ฌธ์ arr[i]--; ๋ฅผ ํด์ฃผ๋ฉฐ while๋ฌธ ์์์ ์ถ๋ ฅํด์ค๋ค
๊ทธ๋ฌ๋ฉด ์ ๋ ฌ์ ์ฝ๊ฒ ํ ์ ์๋ค !
์นด์ดํ ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๊ฐ O(n)์ด์ง๋ง, ์์ ๋ฒ์์ ๋ฐ๋ผ ๋ฐฐ์ด์ ์์ฑํด์ค์ผํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
๊ทธ๋์ ์์ ๋ฒ์๊ฐ ํฌ์ง ์์ ๋๋ง ์ฌ์ฉ์ ํ๋ ๊ฒ์ด ์ข๋ค !
๊ทธ๋๋ .. ์ด ๋ฌธ์ ๋ฅผ ํ๊ณ ๋์ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ํ ๋, ๋ฐฐ์ด์์ ๋ช๋ฒ ๋์๋์ง ์ธ๊ณ ์ถ์ ๋ ์นด์ดํ ๋ฐฉ์์ ์ด์ฉํ๋ค.
๋ฐฑ์ค 17299 ๋ฌธ์ ๋ฐ, ๋ช๋ฒ ๋ฑ์ฅํ๋์ง ํ์์ ๋ํ ๋ฐฐ์ด์ ๋ง๋ค ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ ํ์ฉํ๋ค.
int[] arr = new int[n];
int[] freq = new int[1000001];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
freq[arr[i]]++; // ์ด๋ ๊ฒ ์ฌ์ฉ !
}