2023. 11. 16. 14:24ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1248
-> ์ด์ ๋ฌธ์ ํ์ด
10. ๋ง๊ตฌ๊ฐ ์ ํ๊ธฐ
์ค๋ช
N๊ฐ์ ๋ง๊ตฌ๊ฐ์ด ์์ง์ ์์ ์์ต๋๋ค. ๊ฐ ๋ง๊ตฌ๊ฐ์ x1, x2, x3, ......, xN์ ์ขํ๋ฅผ ๊ฐ์ง๋ฉฐ,
๋ง๊ตฌ๊ฐ๊ฐ์ ์ขํ๊ฐ ์ค๋ณต๋๋ ์ผ์ ์์ต๋๋ค.
ํ์๋ C๋ง๋ฆฌ์ ๋ง์ ๊ฐ์ง๊ณ ์๋๋ฐ, ์ด ๋ง๋ค์ ์๋ก ๊ฐ๊น์ด ์๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค.
๊ฐ ๋ง๊ตฌ๊ฐ์๋ ํ ๋ง๋ฆฌ์ ๋ง๋ง ๋ฃ์ ์ ์๊ณ ,
๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋๊ฐ ๋๊ฒ ๋ง์ ๋ง๊ตฌ๊ฐ์ ๋ฐฐ์นํ๊ณ ์ถ์ต๋๋ค.
C๋ง๋ฆฌ์ ๋ง์ N๊ฐ์ ๋ง๊ตฌ๊ฐ์ ๋ฐฐ์นํ์ ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋๊ฐ ๋๋ ๊ทธ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
์ ๋ ฅ
์ฒซ ์ค์ ์์ฐ์ N(3<=N<=200,000)๊ณผ C(2<=C<=N)์ด ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋๋ค.
๋์งธ ์ค์ ๋ง๊ตฌ๊ฐ์ ์ขํ xi(0<=xi<=1,000,000,000)๊ฐ ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ์ต๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ์ธ์.
์์ ์ ๋ ฅ 1
5 3
1 2 8 4 9
์์ ์ถ๋ ฅ 1
3
๋ฌธ์ ํ์ด 1
public int solution(int n, int c, int[] arr)
{
int answer = 0;
Arrays.sort(arr);
// ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์ด๋ถ ๊ฒ์ ํด์ผํจ !
int lt =1, rt = arr[n - 1];
while (lt <= rt)
{
int mid = (lt + rt) / 2;
if (count(arr, mid) >= c) {
answer = mid;
lt = mid + 1;
}else {
rt = mid - 1;
}
}
return answer;
}
public int count(int[] arr, int mid)
{
int cnt = 1; // ๋ฐฐ์นํ ๋ง์ ๋ง๋ฆฌ ์
int ep = arr[0]; // ์ฐ์ ์ ์ผ ์ผ์ชฝ ์ขํ์ ๋ฐฐ์น
for (int i = 1; i < arr.length; i++)
{
if (arr[i] - ep >= mid) {
cnt++;
ep = arr[i];
}
}
๐พ : ๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ค count ํจ์์ ํด๋นํ๋ ๋ถ๋ถ์ด ์ค์ํ๋ค. count ํ๋ ๋ถ๋ถ์์ lt์ rt์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฎ๊ธธ ํ๋จ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌ์กฐ๋ ๊ฑฐ์ ๋์ผํ๊ธฐ ๋๋ฌธ !
์ด๋ฒ์๋ ๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ ๋ฒ์๋ก ๋ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ๊ตฌํด์ผ ํ๋ค.
๋ฐ๋ผ์ lt์๋ 1, rt ์๋ ๊ทธ ๋ง์ ์ขํ ๋ฐฐ์ด์ ๊ฐ์ฅ ๋ง์ง๋ง ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. (์ ๋ ฌ ํ)
์ด๋ lt๋ฅผ arr[0] ์ผ๋ก ์ง์ ํ๋ฉด ์๋๋ค!!! (๋ด๊ฐ ๊ทธ๋ผ) ์๋ฅผ ๋ค์ด arr์ด 5 8 9 4 2 ์ด๋ฐ์์ด๋ฉด ์ ๋ ฌํ๋คํด๋ ๋ ๋ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ 1์ด ์๋ arr[0] 2๋ถํฐ ์์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
public int count(int[] arr, int mid)
{
int cnt = 1; // ๋ฐฐ์นํ ๋ง์ ๋ง๋ฆฌ ์
int ep = arr[0]; // ์ฐ์ ์ ์ผ ์ผ์ชฝ ์ขํ์ ๋ฐฐ์น
for (int i = 1; i < arr.length; i++)
{
if (arr[i] - ep >= mid) {
cnt++;
ep = arr[i];
}
}
return cnt;
}
count ํจ์์๋ cnt ๋ณ์์ ep ๋ณ์๋ฅผ ์ ์ธํ๋๋ฐ cnt ๋ณ์์๋ ๋ฐฐ์นํ ๋ง์ ์๋ฅผ ๋ํ๋ด๊ณ , ep๋ ๊ฐ์ฅ ์ผ์ชฝ์ ํด๋นํ๋ ๋ง์ ์ขํ ๊ฐ์ ํด๋นํ๋ค. ์ฐ์ ์ฒซ๋ฒ์งธ๋ก ๊ฐ์ฅ ์ผ์ชฝ์ ๋ง์ ๋ฐฐ์นํ๊ธฐ ์ํด ep์๋ arr[0] ์ ๊ฐ์ ๋ฐฐ์นํ๊ณ , ๊ทธ ๋ค์ ํ ๋ง๋ฆฌ๋ฅผ ๋ฐฐ์นํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ cnt ์ ๊ฐ์ 1๋ก ์ด๊ธฐํํด์ ์์ํ๋ค.
๊ทธ ๋ค์ for๋ฌธ์ i = 1๋ถํฐ ๋๋ฉด์ arr[i]์์ ep๋ฅผ ๋บ ๊ฑฐ๋ฆฌ ๊ฐ์ด mid ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ง์ ๋ฐฐ์นํ ์ ์๊ธฐ ๋๋ฌธ์ cnt์ ๊ฐ์ 1 ์ฆ๊ฐ์ํค๊ณ , ep์๋ ์ด์ ๊ทธ arr[i] ๊ฐ์ ๋ฐฐ์นํ๋ค.
์ด๋ ๊ฒ ๋ฐ๋ณตํ ๋ค์ cnt ๊ฐ์ ๋ฆฌํดํ๋ฉด ๋ฐฐ์นํ ๋ง์ ์๊ฐ ์ฒ ์๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ง์ ์ c ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๊ฑฐ๋ฆฌ๋ฅผ ์ข ๋ ๋ํ ์ ์๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ lt์ ๊ฐ์ mid ๋ณด๋ค + 1 ํด์ ์๋ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ฝ count ํจ์๊ฐ ๋ฆฌํดํ cnt ๊ฐ์ด c ๋ณด๋ค ์์ผ๋ฉด ๊ฑฐ๋ฆฌ๊ฐ ๋๋ฌด ๋์ด์ ์ฃผ์ด์ง ๋ง c ๋ฅผ ๋ชจ๋ ๋ฐฐ์นํ์ง ๋ชปํ๋ค๋ ๋ง์ด๊ธฐ ๋๋ฌธ์ rt ์ ๊ฐ์ mid - 1 ํด์ ๋ค์ ์๋ํด๋ณธ๋ค.
์ด๋ ๊ฒ ๋ฐ๋ณตํ๋ค ๋ณด๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ๋ง์ ์ต๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ค.