์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch05. Stack, Queue (์ž๋ฃŒ๊ตฌ์กฐ) : ๊ณต์ฃผ ๊ตฌํ•˜๊ธฐ

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

728x90

 

https://hyejin.tistory.com/1236

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch05. Stack, Queue (์ž๋ฃŒ๊ตฌ์กฐ) : ์‡ ๋ง‰๋Œ€๊ธฐ

https://hyejin.tistory.com/1235 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch05. Stack, Queue (์ž๋ฃŒ๊ตฌ์กฐ) : ํ›„์œ„์‹ ์—ฐ์‚ฐ (postfix) https://hyejin.tistory.com/1234 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch05. Stack, Queue (์ž๋ฃŒ๊ตฌ์กฐ) : ํฌ๋ ˆ์ธ

hyejin.tistory.com

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

 

 

 

6. ๊ณต์ฃผ ๊ตฌํ•˜๊ธฐ 

์„ค๋ช…

์ •๋ณด ์™•๊ตญ์˜ ์ด์›ƒ ๋‚˜๋ผ ์™ธ๋™๋”ธ ๊ณต์ฃผ๊ฐ€ ์ˆฒ์†์˜ ๊ดด๋ฌผ์—๊ฒŒ ์žกํ˜€๊ฐ”์Šต๋‹ˆ๋‹ค.

์ •๋ณด ์™•๊ตญ์—๋Š” ์™•์ž๊ฐ€ N๋ช…์ด ์žˆ๋Š”๋ฐ ์„œ๋กœ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐ€๊ฒ ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ •๋ณด์™•๊ตญ์˜ ์™•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐˆ ์™•์ž๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์™•์€ ์™•์ž๋“ค์„ ๋‚˜์ด ์ˆœ์œผ๋กœ 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ์ฐจ๋ก€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด๋‹ค.

๊ทธ๋ฆฌ๊ณ  1๋ฒˆ ์™•์ž๋ถ€ํ„ฐ N๋ฒˆ ์™•์ž๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉฐ ๋™๊ทธ๋ž—๊ฒŒ ์•‰๊ฒŒ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  1๋ฒˆ ์™•์ž๋ถ€ํ„ฐ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉฐ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ฒˆํ˜ธ๋ฅผ ์™ธ์น˜๊ฒŒ ํ•œ๋‹ค.

 

ํ•œ ์™•์ž๊ฐ€ K(ํŠน์ •์ˆซ์ž)๋ฅผ ์™ธ์น˜๋ฉด ๊ทธ ์™•์ž๋Š” ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐ€๋Š”๋ฐ์„œ ์ œ์™ธ๋˜๊ณ  ์› ๋ฐ–์œผ๋กœ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์™•์ž๋ถ€ํ„ฐ ๋‹ค์‹œ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ฒˆํ˜ธ๋ฅผ ์™ธ์นœ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๋‚จ์€ ์™•์ž๊ฐ€ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

์˜ˆ๋ฅผ ๋“ค์–ด ์ด 8๋ช…์˜ ์™•์ž๊ฐ€ ์žˆ๊ณ , 3์„ ์™ธ์นœ ์™•์ž๊ฐ€ ์ œ์™ธ๋œ๋‹ค๊ณ  ํ•˜์ž. ์ฒ˜์Œ์—๋Š” 3๋ฒˆ ์™•์ž๊ฐ€ 3์„ ์™ธ์ณ ์ œ์™ธ๋œ๋‹ค.

์ด์–ด 6, 1, 5, 2, 8, 4๋ฒˆ ์™•์ž๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ œ์™ธ๋˜๊ณ  ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๋‚จ๊ฒŒ ๋œ 7๋ฒˆ ์™•์ž์—๊ฒŒ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ๊ฐ‘๋‹ˆ๋‹ค.

N๊ณผ K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ณต์ฃผ๋ฅผ ๊ตฌํ•˜๋Ÿฌ ๊ฐˆ ์™•์ž์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

์ฒซ ์ค„์— ๋งˆ์ง€๋ง‰ ๋‚จ์€ ์™•์ž์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

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

8 3

 

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

7

 

 

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

public int solution(int n, int k)
{
   Queue<Integer> queue = new LinkedList<>();
   
   for (int i = 1; i <= n; i++)
   {
      queue.add(i);
   }
   
   int cnt = 1;
   while (queue.size() != 1)
   {
      if (cnt != k) {
         Integer poll = queue.poll();
         queue.offer(poll);
         cnt++;
      }else {
         queue.poll();
         cnt = 1;
      }
   }
   
   return queue.element();
}

๐Ÿ‘ฉ‍๐Ÿ’ป : ์ด ๋ฌธ์ œ๋Š” Queue๋ฅผ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ์ด๋‹ค. Queue์— ์™•์ž ๋ฒˆํ˜ธ 1 ~ n์„ ๋„ฃ์–ด์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ queue์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 1์ด ์•„๋‹ ๋•Œ๊นŒ์ง€ while๋ฌธ์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ k๋ฒˆ์งธ ๊ฐ’์€ queue์—์„œ ๋นผ๋‚ด๊ณ , k๋ฒˆ์งธ ๊ฐ’์ด ์•„๋‹Œ ๊ฒƒ๋“ค์€ ๋‹ค์‹œ queue์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค. 

์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ queue์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 1์ด ๋˜๋ฉด ๋งˆ์ง€๋ง‰ ๋‚จ์€ ์™•์ž์ด๋ฏ€๋กœ ์ด ์™•์ž์˜ ๊ฐ’์„ ๊บผ๋‚ด์„œ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

cnt ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์ด ๊ฐ’์ด k๊ฐ€ ๋˜๋ฉด k ๋ฒˆ์งธ ์™•์ž๋ฅผ poll ํ•ด์ฃผ๊ณ  k ๊ฐ’์ด ์•„๋‹ ๋•Œ๋Š” ๋‹ค์‹œ queue์— offer ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

(k๋ฒˆ์งธ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ๋Š” ๋‹ค์‹œ cnt ๊ฐ’์„ 1๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๊ณ , k๋ฒˆ์งธ๊ฐ€ ์•„๋‹ ๋•Œ cnt์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€ ์‹œ์ผœ์คฌ๋‹ค.)

 

๋‚˜๋Š” queue์— ๊ฐ’์„ ๋„ฃ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋ชฐ๋ผ์„œ..๊ทธ๋ƒฅ add() ์™€ offer() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๊ธธ๋ž˜ ์ด๋ฅผ ํ™œ์šฉํ–ˆ๊ณ , 

queue์—์„œ ๊ฐ’์„ ๊บผ๋‚ผ ๋•Œ๋Š” poll() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ๊บผ๋ƒˆ๋‹ค. 

 

 

 

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

public int solution2(int n, int k)
{
   int answer = 0;
   Queue<Integer> queue2 = new LinkedList<>();
   for (int i = 1; i <=n; i++)
   {
      queue2.offer(i);
   }
   
   while (!queue2.isEmpty())
   {
      for (int i = 1; i <k; i++)
      {
         queue2.offer(queue2.poll()); // poll() : ๊บผ๋‚ด๊ณ  ๊ทธ ๊บผ๋‚ธ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
      }
      queue2.poll();
      
      if (queue2.size() == 1)
         answer = queue2.poll();
   }
   
   
   return answer;
}

๐Ÿ‘พ : ๊ฐ•์‚ฌ๋‹˜๋„ ๋‚˜์™€ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ ๊ฐ•์‚ฌ๋‹˜์€ ์šฐ์„  queue์— offer ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•ด์„œ queue์— ๊ฐ’์„ 1 ~ n๊นŒ์ง€ ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์คฌ๋‹ค. 

 

 ๊ทธ ๋‹ค์Œ queue๊ฐ€ isEmpty ์ฆ‰, ๋น„์–ด์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋งŒ while๋ฌธ์„ ๋„๋Š”๋ฐ, ์ด๋•Œ for๋ฌธ์„ ์ด์šฉํ•ด์„œ 1๋ถ€ํ„ฐ k ๊ฐ’ ์ „๊นŒ์ง€๋Š” queue์—์„œ ๊บผ๋‚ธ ๊ฐ’์„ ๋‹ค์‹œ queue์— ๋„ฃ์–ด์คฌ๋‹ค. (k๊ฐ€ 3์ผ ๋•Œ๋Š” 1, 2 ๋‘๊ฐœ์˜ ๊ฐ’๋งŒ queue์—์„œ ๊บผ๋‚ด์„œ queue์— ๋‹ค์‹œ offer ํ•ด์ค€๋‹ค.) 

for๋ฌธ์„ ๋Œ๊ณ  ๋‚˜๋ฉด ๊ทธ๋•Œ๊ฐ€ k๋ฒˆ์งธ๋ผ๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— queue2์—์„œ poll๋กœ ๊ทธ ๊ฐ’์„ ๊บผ๋‚ด๊ณ , ์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ queue์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 1์ผ ๋•Œ, ์ด ๊ฐ’์„ ๊บผ๋‚ด์„œ answer์— ๋„ฃ์–ด์ฃผ๊ณ , ๊ทธ๋Ÿฌ๋ฉด queue์— ์•„๋ฌด๊ฒƒ๋„ ๋“ค์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— while๋ฌธ๋„ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  answer๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

 

 

 

 

 

 

728x90