https://www.acmicpc.net/problem/10989
10989๋ฒ: ์ ์ ๋ ฌํ๊ธฐ 3
์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N(1 ≤ N ≤ 10,000,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด ์๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
www.acmicpc.net
๋ฐฑ์ค 10989๋ฒ ์ ์ ๋ ฌํ๊ธฐ3 ๋ฌธ์ ๋ฅผ Collections.sort()๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋๋ ์๋์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ ์ค๋ฅ๊ฐ ๋ด๋ค.
๊ตฌ๊ธ๋ง์ ํตํด ์์๋ณด์๋๋, Collections.sort()๋ Arrays.sort()๊ฐ์ ๋ฉ์๋๋ ํ๊ท ์๊ฐ๋ณต์ก๋๊ฐ ๐ถ(nlogn) ์ธ ๋ฐ๋ฉด์
Counting sort๋ ํ๊ท ์๊ฐ๋ณต์ก๋๊ฐ ๐ถ(๐) ์ธ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ์ธ ๊ฒ์ ์๊ฒ ๋์๋ค.
Arrays.sort()๋ ํ๊ท : ๐ถ(nlogn) / ์ต์ : ๐ถ(n^2)
Collections.sort()๋ ํ๊ท , ์ต์ : ๐ถ(nlogn) ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๋จ, ์นด์ดํ ์ ๋ ฌ์ ์ ๋ ฌํ ๋ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ(์ซ์ ๊ฐ์๋ฅผ ์ ์ฅํ ๊ณต๊ฐ, ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๊ณต๊ฐ)๊ฐ ํ์ํ๋ค๋ ์ ๊ณผ, ๊ฐ์ฅ ํฐ ์ซ์์ ์ํฅ์ ๋ฐ๋๋ค๋ ์ ์ ๋จ์ ์ด๋ค.(๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ์์๊ฐ ์์ฒญ๋๊ฒ ํฐ ์ซ์๊ฐ ์๋๋ผ๋ฉด ์ฌ์ฉํ์!)
๊ฐ๋จํ๊ฒ ์นด์ดํ ์ ๋ ฌ์, ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ช ๋ฒ ๋์๋์ง๋ฅผ ์ธ์ด์ฃผ๊ณ , ํด๋น ๊ฐ์ ์ธ๋ฑ์ค๋ก ํ๋ ์๋ก์ด ๋ฐฐ์ด(counting)์ ๊ฐ์ 1 ์ฆ๊ฐ์ํจ๋ค. ๊ทธ๋ฆผ์ผ๋ก ์๋ฅผ ๋ค์ด๋ณด๊ฒ ๋ค.
array[0] = 7์ด๋ฏ๋ก counting[7] ๊ฐ์ 1 ์ฆ๊ฐ,
array[1] = 2 ์ด๋ฏ๋ก counting[2] ๊ฐ์ 1 ์ฆ๊ฐ,
...
array[11] = 1 ์ด๋ฏ๋ก count[1] ๊ฐ์ 1 ์ฆ๊ฐ.
์ด ๊ณผ์ ์ ๋ง์น๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ counting ๋ฐฐ์ด์ด ์์ฑ์ด๋๋ค.
์๋๋ผ๋ฉด, counting ๋ฐฐ์ด์ ๊ฐ ๊ฐ์ ๋์ ํฉ์ผ๋ก ๋ณํ์์ผ์ค์ผ ํ์ง๋ง, 10989๋ฒ ๋ฐฑ์ค๋ฌธ์ ์ ๊ฐ์ด ์์ ๋ฒ์๋ฅผ ์๊ณ ์๊ณ ์ ์ถ๋ ฅ๋ง ํ๋ ๊ฒ์ด๋ผ๋ฉด ์๋์ ๊ฐ์ด, ๋์ ํฉ ๋ถ๋ถ์ skipํ๊ณ count[i]๊ฐ์ด 0์ด ๋ ๋๊น์ง ์ธ๋ฑ์ค๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
for(int i = 1; i < 10001; i++) {
while(cnt[i] > 0) {
System.out.println(i);
cnt[i]--;
}
}
'Algorithm > BaekJoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1563๋ฒ: ๊ฐ๊ทผ์(Java) (0) | 2023.07.11 |
---|---|
[๋ฐฑ์ค] 1920๋ฒ : ์ ์ฐพ๊ธฐ - JAVA [์๋ฐ] ์ด๋ถ ํ์ ๋ฌธ์ (0) | 2021.10.25 |
[๋ฐฑ์ค] 1874๋ฒ : ์คํ ์์ด - JAVA [์๋ฐ] (0) | 2021.10.25 |
[๋ฐฑ์ค] 1654๋ฒ : ๋์ ์๋ฅด๊ธฐ - JAVA [์๋ฐ] (0) | 2021.10.25 |