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

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

728x90

 

https://hyejin.tistory.com/1238

 

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

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

hyejin.tistory.com

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

 

 

์„ค๋ช…

๋ฉ”๋””์ปฌ ๋ณ‘์› ์‘๊ธ‰์‹ค์—๋Š” ์˜์‚ฌ๊ฐ€ ํ•œ ๋ช…๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.

์‘๊ธ‰์‹ค์€ ํ™˜์ž๊ฐ€ ๋„์ฐฉํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ง„๋ฃŒ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์œ„ํ—˜๋„๊ฐ€ ๋†’์€ ํ™˜์ž๋Š” ๋นจ๋ฆฌ ์‘๊ธ‰์กฐ์น˜๋ฅผ ์˜์‚ฌ๊ฐ€ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์‘๊ธ‰์‹ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ™˜์ž์˜ ์ง„๋ฃŒ์ˆœ์„œ๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.

• ํ™˜์ž๊ฐ€ ์ ‘์ˆ˜ํ•œ ์ˆœ์„œ๋Œ€๋กœ์˜ ๋ชฉ๋ก์—์„œ ์ œ์ผ ์•ž์— ์žˆ๋Š” ํ™˜์ž๋ชฉ๋ก์„ ๊บผ๋ƒ…๋‹ˆ๋‹ค.

• ๋‚˜๋จธ์ง€ ๋Œ€๊ธฐ ๋ชฉ๋ก์—์„œ ๊บผ๋‚ธ ํ™˜์ž ๋ณด๋‹ค ์œ„ํ—˜๋„๊ฐ€ ๋†’์€ ํ™˜์ž๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋Œ€๊ธฐ๋ชฉ๋ก ์ œ์ผ ๋’ค๋กœ ๋‹ค์‹œ ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ง„๋ฃŒ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

 

์ฆ‰ ๋Œ€๊ธฐ๋ชฉ๋ก์— ์ž๊ธฐ ๋ณด๋‹ค ์œ„ํ—˜๋„๊ฐ€ ๋†’์€ ํ™˜์ž๊ฐ€ ์—†์„ ๋•Œ ์ž์‹ ์ด ์ง„๋ฃŒ๋ฅผ ๋ฐ›๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

ํ˜„์žฌ N๋ช…์˜ ํ™˜์ž๊ฐ€ ๋Œ€๊ธฐ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค.

N๋ช…์˜ ๋Œ€๊ธฐ๋ชฉ๋ก ์ˆœ์„œ์˜ ํ™˜์ž ์œ„ํ—˜๋„๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, ๋Œ€๊ธฐ๋ชฉ๋ก์ƒ์˜ M๋ฒˆ์งธ ํ™˜์ž๋Š” ๋ช‡ ๋ฒˆ์งธ๋กœ ์ง„๋ฃŒ๋ฅผ ๋ฐ›๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

๋Œ€๊ธฐ๋ชฉ๋ก์ƒ์˜ M๋ฒˆ์งธ๋Š” ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ์ œ์ผ ์ฒ˜์Œ ํ™˜์ž๋ฅผ 0๋ฒˆ์งธ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ž…๋ ฅ

์ฒซ ์ค„์— ์ž์—ฐ์ˆ˜ N(5<=N<=100)๊ณผ M(0<=M<N) ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„์— ์ ‘์ˆ˜ํ•œ ์ˆœ์„œ๋Œ€๋กœ ํ™˜์ž์˜ ์œ„ํ—˜๋„(50<=์œ„ํ—˜๋„<=100)๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์œ„ํ—˜๋„๋Š” ๊ฐ’์ด ๋†’์„ ์ˆ˜๋ก ๋” ์œ„ํ—˜ํ•˜๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ๊ฐ’์˜ ์œ„ํ—˜๋„๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ถœ๋ ฅ

M๋ฒˆ์งธ ํ™˜์ž์˜ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ง„๋ฃŒ๋ฐ›๋Š”์ง€ ์ถœ๋ ฅํ•˜์„ธ์š”.

 

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

5 2
60 50 70 80 90

 

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

3

 

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

6 3
70 60 90 60 60 60

 

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

4

 

 

 

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

public int solution(int n, int m, int[] arr)
{
   int answer = 0;
   Queue<Patient> queue = new LinkedList<>();
   
   Patient mPatient = new Patient(arr[m], m);
   for (int i = 0; i < arr.length; i++)
   {
      queue.offer(new Patient(arr[i], i));
   }
   
   int cnt = 0;
   while (true)
   {
      int max = 0;
      for (Patient patient : queue)
      {
         if (patient.getRisk() > max) {
            max = patient.getRisk();
         }
      }
      
      if (queue.peek().getRisk() >= max) {
         if (queue.peek().equals(mPatient)) {
            cnt++;
            break;
         }else
         {
            cnt ++;
            queue.poll();
         }
      } else {
         queue.offer(queue.poll());
      }
   }
   
   
   return cnt;
}
class Patient
{
   int risk;
   int order;
   
   public Patient()
   {
   }
   
   public Patient(int risk, int order)
   {
      this.risk = risk;
      this.order = order;
   }
   
   public int getRisk()
   {
      return risk;
   }
   
   public int getOrder()
   {
      return order;
   }
   
   @Override
   public boolean equals(Object o)
   {
      if (this == o)
         return true;
      if (o == null || getClass() != o.getClass())
         return false;
      Patient patient = (Patient) o;
      return risk == patient.risk && order == patient.order;
   }
   
   @Override
   public int hashCode()
   {
      return Objects.hash(risk, order);
   }
}

 

๐Ÿ‘ฉ‍๐Ÿ’ป : ์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ’€์ง€ ๊ณ„์† ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€... ๊ตฌ๊ธ€๋ง์„ ํ–ˆ๋Š”๋ฐ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ Queue์— ๋„ฃ๋Š” ๋‹ค๋Š” ํžŒํŠธ๋ฅผ ๋ณด๊ณ , ๊ฑฐ๊ธฐ๊นŒ์ง€๋งŒ ๋ณธ ๋‹ค์Œ์—” ๋‚ด๊ฐ€ ์ง์ ‘ ํ’€์—ˆ๋‹ค ! (๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ƒ๊ฐ์„ ํ•˜์ง€ ๋ชปํ–ˆ์—ˆ๋‹คใ… ใ… ) 

 

์•”ํŠผ Patient ๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , risk๊ฐ€ ์œ„ํ—˜๋„, order๋Š” ์ ‘์ˆ˜ํ•œ ์ˆœ์„œ๋ฅผ ๋‹ด๋„๋ก ํ–ˆ๋‹ค. 

๊ทธ ๋‹ค์Œ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ๊ฐ์ฒด ๋น„๊ต๋ฅผ ์œ„ํ•ด์„œ equals๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ id์™€ order๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ๊ฐ์ฒด๋กœ ์ธ์‹ํ•˜๋„๋ก ํ–ˆ๋‹ค. 

 

M๋ฒˆ์งธ ํ™˜์ž๊ฐ€ ์–ธ์ œ ์ง„๋ฃŒ๋ฐ›๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ M ๋ฒˆ์งธ ํ™˜์ž๋ฅผ ๋ฏธ๋ฆฌ mPatient๋กœ ๋งŒ๋“ค์–ด์คฌ๋‹ค. 

๊ทธ๋Ÿฌ๊ณ  ์ด์ œ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ Patient๋ฅผ ๋‹ด๋Š” Queue๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , ๊ทธ ๋‹ค์Œ queue์— ์œ„ํ—˜๋„์™€ ์ˆœ์„œ๋ฅผ ๋‹ด์•„ Patent๋ฅผ ๋งŒ๋“ค๊ณ  offer ํ•ด์คฌ๋‹ค. 

๊ทธ ๋‹ค์Œ while ๋ฌดํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ๋งŒ๋“  ๋‹ค์Œ, queue๋ฅผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ๋ฉด์„œ max ๊ฐ’ ์ฆ‰, ์œ„ํ—˜๋„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฐ’์„ ๊ตฌํ•˜๊ณ , ๊ทธ ๋‹ค์Œ, queue์—์„œ peek ํ•œ ๊ฐ’์ด max๋ณด๋‹ค ํฌ๋ฉด cnt ๊ฐ’์„ +1 ๋งŒ ํ•ด์ฃผ๊ณ , queue์—์„œ poll ํ•œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ peekํ•œ ๊ฐ’์ด max ๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋‹ค์‹œ queue์— ๋„ฃ์–ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— queue์—์„œ poll ํ•œ ๊ฐ’์„ ๋‹ค์‹œ queue์— offer ํ•ด์คฌ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ  peekํ•œ ๊ฐ’์ด max ๋ž‘ ๊ฐ™์„ ๋•Œ, queue.peekํ•œ Patient๊ฐ€ mPatient๋ž‘ ๊ฐ™์€์ง€ equals ๋น„๊ต๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜๊ณ  risk์™€ order๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” cnt ์˜ ๊ฐ’์„ +1 ํ•ด์ฃผ๊ณ , break ์„ ํ†ตํ•ด while๋ฌธ์—์„œ ๋ฒ—์–ด๋‚œ ๋‹ค์Œ cnt ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

 

 

 

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

public int solution2(int n, int m, int[] arr)
{
   int answer = 0;
   Queue<Person> queue = new LinkedList<>();
   for (int i = 0; i < n; i++)
   {
      queue.offer(new Person(i, arr[i]));
   }
   
   while (!queue.isEmpty())
   {
      Person tmp = queue.poll();
      for (Person x : queue)
      {
         if (x.priority > tmp.priority)
         {
            queue.offer(tmp);
            tmp = null;
            break;
         }
      }
      
      if (tmp != null) { // tmp์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ œ์ผ ๋†’๋‹ค๋Š” ๋œป !
         answer++;
         if (tmp.id == m)
            return answer;
      }
   }
   
   return answer;
}
class Person
{
   int id;
   int priority;
   
   public Person(int id, int priority)
   {
      this.id = id;
      this.priority = priority;
   }
}

๐Ÿ‘พ : ๊ฐ•์‚ฌ๋‹˜์€ ์ข€ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€์—ˆ๋‹ค. Person ์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ id๋Š” ์ˆœ์„œ, priority๋Š” ์œ„ํ—˜๋„์˜ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋„๋ก ํ–ˆ๋‹ค. 

๊ทธ ๋‹ค์Œ Person์„ ๋‹ด๋Š” Queue๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ณ , queue์— offer๋กœ Person ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ id์™€ priority์˜ ๊ฐ’์„ ๋„ฃ์–ด์คฌ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  while ๋ฐ˜๋ณต๋ฌธ์—์„œ queue๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ 

๋จผ์ € queue์—์„œ pollํ•œ ๊ฐ’์„ ๊บผ๋‚ด์„œ tmp ๋ผ๋Š” Person ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , for ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ queue ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ tmp์˜ priority์˜ ๊ฐ’๊ณผ queue์—์„œ ๊บผ๋‚ธ x์˜ priority ๊ฐ’ ์ค‘์—์„œ tmp์˜ priority๊ฐ€ ๋” ์ž‘์œผ๋ฉด queue์—์„œ poll ํ•œ ๊ฐ’์„ ๋‹ค์‹œ queue์— offer ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  tmp ๊ฐ’์„ null๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  break ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (๋” ์ด์ƒ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ ํ•„์š”๋Š” ์—†์œผ๋‹ˆ!) 

 

๊ทธ๋ฆฌ๊ณ  tmp๊ฐ€ null์ด ์•„๋‹ˆ๋ผ๋Š” ๋œป์€ tmp๊ฐ€ ์ง€๊ธˆ ์ œ์ผ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ™˜์ž๋ผ๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์„  answer์˜ ๊ฐ’์„ +1 ํ•ด์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ tmp์˜ id ๊ฐ€ ์ฃผ์–ด์ง„ ๊ฐ’ m ๊ณผ ๋™์ผํ•˜๋‹ค๋ฉด M ๋ฒˆ์งธ ํ™˜์ž๋ผ๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— answer๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

 

 

 

 

 

 

728x90