새소식

📘 기초 지식/알고리즘

[알고리즘 풀이] 박스 포장

  • -

수도 코드

1. 배열을 담을 queue와 첫사람, result, count를 int 타입으로 선언

2. queue가 빌 때까지 queue에서 숫자를 하나씩 꺼내서 다음 숫자와 비교

2.1. 이전 숫자가 다음 숫자보다 작으면 종료

2.2. 이전 숫자가 다음 숫자보다 크면 첫사람에 다음사람을 할당하고 count 1 증가하고 result에 count와 result중 큰 값을 할당

3. 위를 반복해서 가장 큰 result를 리턴

 

 import java.util.*;
 
 public class Solution { 
   public int paveBox(Integer[] boxes) {
     Queue<Integer> queue = new LinkedList<>(Arrays.asList(boxes));

     //첫 사람 선언, 할당
     Integer first = queue.poll();
     // 결과를 담을 변수, 초기값 1
     int result = 1;
     // 앞으로 비교할 인원수, 초기값 1
     int count = 1;

     // 큐가 빌 때까지 순회
     while(queue.peek() != null) {
       // 비교할 짐 할당
       Integer compare = queue.poll();
       // 비교할 짐이 더 크다면(함께 나갈 수 없는 경우)
       if(first < compare) {
         // 결과와 현재 나갈 수 있는 수중 큰 수를 할당
         result = Math.max(result,count);
         // 카운트 초기화
         count = 1;
         // 이번에 나갈 사람을 first에 할당(나갈 사람은 벌써 compare에 poll()을 사용해 큐에서 비어있는 상황)
         first = compare;
       } else {
         // 비교할 짐이 더 작다면(함께 나갈 수 있는 경우)
         count++;
         // 마지막까지 다 순회했는데도 더 큰 짐이 없는 경우
         if(queue.isEmpty()) {
           // 현재까지 나갈 수 있는 짐의 크기와, 앞서서 비교한 값중 큰 값을 할당
           result = Math.max(result,count);
         }
       }
     }
     //결과 반환
     return result;
   }
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.