์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ๋งˆ๊ตฌ๊ฐ„ ์ •ํ•˜๊ธฐ (๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜)

2023. 11. 16. 14:24ใ†์ธํ”„๋Ÿฐ/์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„

728x90

 

https://hyejin.tistory.com/1248

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ๋ฎค์ง๋น„๋””

https://hyejin.tistory.com/1247 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์ด๋ถ„ ๊ฒ€ https://hyejin.tistory.com/1246 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searc

hyejin.tistory.com

-> ์ด์ „ ๋ฌธ์ œ ํ’€์ด 

 

 

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 ํ•ด์„œ ๋‹ค์‹œ ์‹œ๋„ํ•ด๋ณธ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณตํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ง์˜ ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

'์ธํ”„๋Ÿฐ > ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„์ˆ˜ ์ถœ๋ ฅ  (1) 2023.11.17
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์žฌ๊ท€ ํ•จ์ˆ˜  (0) 2023.11.17
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ๋ฎค์ง๋น„๋””์˜ค (๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜)  (4) 2023.11.09
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์ด๋ถ„ ๊ฒ€์ƒ‰  (0) 2023.11.09
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch06. Sorting and Searching(์ •๋ ฌ, ์ด๋ถ„๊ฒ€์ƒ‰๊ณผ ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜) : ์ขŒํ‘œ ์ •๋ ฌ  (1) 2023.11.08