์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜4. HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set) : ๋งค์ถœ์•ก์˜ ์ข…๋ฅ˜

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

728x90

 

https://hyejin.tistory.com/1228

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜4. HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set) : ์•„๋‚˜๊ทธ๋žจ

https://hyejin.tistory.com/1227 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜4. HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set) : ํ•™๊ธ‰ ํšŒ์žฅ https://hyejin.tistory.com/1226 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, Sliding Window [

hyejin.tistory.com

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

 

 

3. ๋งค์ถœ์•ก์˜ ์ข…๋ฅ˜ 

์„ค๋ช…

ํ˜„์ˆ˜์˜ ์•„๋น ๋Š” ์ œ๊ณผ์ ์„ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์ˆ˜์•„๋น ๋Š” ํ˜„์ˆ˜์—๊ฒŒ N์ผ ๋™์•ˆ์˜ ๋งค์ถœ๊ธฐ๋ก์„ ์ฃผ๊ณ  ์—ฐ์†๋œ K์ผ ๋™์•ˆ์˜ ๋งค์ถœ์•ก์˜ ์ข…๋ฅ˜๋ฅผ

๊ฐ ๊ตฌ๊ฐ„๋ณ„๋กœ ๊ตฌํ•˜๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ N=7์ด๊ณ  7์ผ ๊ฐ„์˜ ๋งค์ถœ๊ธฐ๋ก์ด ์•„๋ž˜์™€ ๊ฐ™๊ณ , ์ด๋•Œ K=4์ด๋ฉด

20 12 20 10 23 17 10

๊ฐ ์—ฐ์† 4์ผ๊ฐ„์˜ ๊ตฌ๊ฐ„์˜ ๋งค์ถœ์ข…๋ฅ˜๋Š”

์ฒซ ๋ฒˆ์งธ ๊ตฌ๊ฐ„์€ [20, 12, 20, 10]๋Š” ๋งค์ถœ์•ก์˜ ์ข…๋ฅ˜๊ฐ€ 20, 12, 10์œผ๋กœ 3์ด๋‹ค.

๋‘ ๋ฒˆ์งธ ๊ตฌ๊ฐ„์€ [12, 20, 10, 23]๋Š” ๋งค์ถœ์•ก์˜ ์ข…๋ฅ˜๊ฐ€ 4์ด๋‹ค.

์„ธ ๋ฒˆ์งธ ๊ตฌ๊ฐ„์€ [20, 10, 23, 17]๋Š” ๋งค์ถœ์•ก์˜ ์ข…๋ฅ˜๊ฐ€ 4์ด๋‹ค.

๋„ค ๋ฒˆ์งธ ๊ตฌ๊ฐ„์€ [10, 23, 17, 10]๋Š” ๋งค์ถœ์•ก์˜ ์ข…๋ฅ˜๊ฐ€ 3์ด๋‹ค.

N์ผ๊ฐ„์˜ ๋งค์ถœ๊ธฐ๋ก๊ณผ ์—ฐ์†๊ตฌ๊ฐ„์˜ ๊ธธ์ด K๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ตฌ๊ฐ„๋ถ€ํ„ฐ ๊ฐ ๊ตฌ๊ฐ„๋ณ„

๋งค์ถœ์•ก์˜ ์ข…๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

 

์ž…๋ ฅ

์ฒซ ์ค„์— N(5<=N<=100,000)๊ณผ K(2<=K<=N)๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„์— N๊ฐœ์˜ ์ˆซ์ž์—ด์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๊ฐ ์ˆซ์ž๋Š” 500์ดํ•˜์˜ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ถœ๋ ฅ

์ฒซ ์ค„์— ๊ฐ ๊ตฌ๊ฐ„์˜ ๋งค์ถœ์•ก ์ข…๋ฅ˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ ์ž…๋ ฅ 1 

7 4
20 12 20 10 23 17 10

 

์˜ˆ์‹œ ์ถœ๋ ฅ 1

3 4 4 3

 

 

๋ฌธ์ œ ํ’€์ด 1

public ArrayList<Integer> solution(int n, int k, int[] arr)
{
   ArrayList<Integer> answer = new ArrayList<>();
   Map<Integer, Integer> map = new HashMap<>();
   
   for (int i = 0; i < n; i++)
   {
      if (i < k)
      {
         map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
         if (i == k - 1) {
            answer.add(map.keySet().size());
         }
      }
      else
      {
         map.put(arr[i - k], map.get(arr[i - k]) - 1);
         if (map.get(arr[i - k]) == 0)
         {
            map.remove(arr[i - k]);
         }
         map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
         answer.add(map.keySet().size());
      }
   }
   
   return answer;
}

๐Ÿ‘ฉ‍๐Ÿ’ป : ์ด๋ฒˆ ๋ฌธ์ œ๋Š” Sliding Window๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ์ด๋•Œ HashMap ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค. 

์šฐ์„  i๊ฐ€ k-1 ๊นŒ์ง€ ๋Œ ๋•Œ๋Š” HashMap์— ๊ธฐ๋ณธ ๊ฐ’์„ ์„ธํŒ…ํ•ด์ฃผ๊ณ  ์ด ํ‚ค ๊ฐ’์˜ size๋ฅผ arrayList์— ๋‹ด์•„์คฌ๋‹ค. (์ฒซ๋ฒˆ์งธ ๊ตฌ๊ฐ„์˜ ๋งค์ถœ ์ข…๋ฅ˜) 

๊ทธ ๋‹ค์Œ i - k ๋ฒˆ์งธ ๊ฐ’์€ ์ฒซ๋ฒˆ์งธ ๊ตฌ๊ฐ„์—์„œ ๋ฒ—์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— HashMap์—์„œ ๊ทธ ๊ฐ’์„ ๋นผ์ฃผ๊ณ , ์ด๋•Œ HashMap์—์„œ arr[i-k]์˜ value ๊ฐ’์„ ๋บ๋”๋‹ˆ 0 ์ด ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋Š” key๊ฐ’์„ ์ œ๊ฑฐํ•ด์ค˜์•ผ ํ•œ๋‹ค. (์•ˆ๊ทธ๋Ÿฌ๋ฉด size ๊ฐ’ ๊ณ„์‚ฐํ•  ๋•Œ value๊ฐ€ 0 ์ธ ํ‚ค๊ฐ’๋„ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ!) 

๊ทธ ๋‹ค์Œ ํ•œ ์นธ ์˜†์œผ๋กœ ๊ฐ€์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— map์— arr[i]  ํ‚ค ๊ฐ’์„ +1 ํ•ด์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ answer์— size๋ฅผ addํ•ด์คฌ๋‹ค. 

 

 

๋ฌธ์ œ ํ’€์ด 2

public ArrayList<Integer> solution2(int n, int k, int[] arr)
{
   ArrayList<Integer> answer = new ArrayList<>();
   HashMap<Integer, Integer> map = new HashMap<>();
   
   for (int i = 0; i < k - 1; i++)
   {
      map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
   }
   int lt = 0;
   for (int rt = k-1; rt < n; rt++)
   {
      map.put(arr[rt], map.getOrDefault(arr[rt], 0) + 1);
      answer.add(map.size());
      map.put(arr[lt], map.get(arr[lt]) - 1);
      if (map.get(arr[lt]) == 0)
      {
         map.remove(arr[lt]);
      }
      lt++;
   }
   
   return answer;
}

๐Ÿ‘พ : ๊ฐ•์‚ฌ๋‹˜๋„ ๋‚˜์™€ ๋น„์Šทํ•˜๊ฒŒ ํ’€์—ˆ๋Š”๋ฐ ๊ฐ•์‚ฌ๋‹˜์€ ์šฐ์„  k-1 ๊ฐœ๋งŒ map์— ์„ธํŒ…ํ•ด์ฃผ๊ณ  lt, rt ๊ฐ’์„ ์ด์šฉํ•ด์„œ ๊ฐ’์„ ๋”ํ•˜๊ณ  ๊ณ„์‚ฐํ•˜๊ณ  ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์–ด๋‚˜๊ฐ”๋‹ค. 

๋จผ์ € ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ HashMap์— k-1 ๋งŒํผ ๊ฐ’์„ ์šฐ์„  ์„ธํŒ…ํ•ด์ฃผ๊ณ , 

๊ทธ ๋‹ค์Œ ๋ฐ˜๋ณต๋ฌธ์—์„œ๋Š” rt๊ฐ€ k-1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์˜†์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ map์— arr[rt] ํ‚ค ๊ฐ’์„ ๊ตฌํ–ˆ์„ ๋•Œ ์—†์œผ๋ฉด 0, ์•„๋‹ˆ๋ฉด ๊ทธ ๊ฐ’์„ ๊ฐ€์ ธ์™€ + 1 ํ•ด์ฃผ๊ณ , HashMap์˜ ์‚ฌ์ด์ฆˆ๋ฅผ answer์— add ํ•ด์คฌ๋‹ค. 

 

๊ทธ๋Ÿฌ๊ณ  ๋‹ค์Œ lt ๊ฐ’์„ ์›€์ง์—ฌ์„œ HashMap์—์„œ lt ํ‚ค ๊ฐ’์— ๋Œ€ํ•œ ๊ฐ’์„ -1  ํ•ด์ฃผ๋Š”๋ฐ ์ด๋•Œ HashMap์˜ ๊ฐ’์ด 0์ด๋˜๋ฉด HashMap์—์„œ remove ํ•ด์คฌ๋‹ค. (๊ทธ๋ž˜์•ผ HashMap ์‚ฌ์ด์ฆˆ ๊ณ„์‚ฐํ•  ๋•Œ ํฌํ•จ ์•ˆํ•จ !!) 

๊ทธ ๋‹ค์Œ lt ๊ฐ’์„ +1 ์ฆ๊ฐ€ํ•ด์ฃผ๋ฉด ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

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

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜4. HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set) : K๋ฒˆ์งธ ํฐ ์ˆ˜ (TreeSet)  (0) 2023.10.25
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜4. HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set) : ๋ชจ๋“  ์•„๋‚˜๊ทธ๋žจ ์ฐพ๊ธฐ  (0) 2023.10.24
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜4. HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set) : ์•„๋‚˜๊ทธ๋žจ  (1) 2023.10.22
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜4. HashMap, TreeSet (ํ•ด์‰ฌ, ์ •๋ ฌ์ง€์› Set) : ํ•™๊ธ‰ ํšŒ์žฅ  (1) 2023.10.21
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, Sliding Window [ํšจ์œจ์„ฑ : O(n^2) --> O(n)] : ์ตœ๋Œ€ ๊ธธ์ด ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด  (0) 2023.10.20