230317 Queue 연습

허크·2023년 3월 17일
0

알고리즘

큐에서 사람을 하나씩 꺼내면서 해당 사람이 나갈 때인지를 판단합니다.

  • 꺼내면서 비교할 것이므로 동적인 형태의 큐가 필요
  • 링크드리스트 큐 생성
  • 반복문으로 boxes를 큐에넣어줌

현재까지 나간 사람의 수와 최대 값(max)을 비교하여 max를 갱신합니다.

  • 최댓값, 현재박스의갯수, 현재박스에있는사람수 변수 선언
  • 큐가 빌때 까지 반복
    • 작을 경우 : 1. 최댓값 ++ 2. 박스 사람 수 ++ 3. 인원 폴
    • 클 경우 : 1. 박스 사람 수를 초기화 2. 현재 박스의 갯수 초기화
      3. 박스 사람 수 ++ 4. 현재 박스의 갯수에 해당 갯수를 넣어줌
      5. 인원 폴
    • 박스 사람 수가 최댓값 보다 클 경우 : 최댓값을 박스 사람수로 교체

모든 사람을 확인한 후, max 값을 반환합니다.


수도코드

max를 구하는 반복문 시작
boxing에 큐값을 poll
if box가 boxing 보다 작을 경우
boxPeople ++;
if maxPeople이 boxPeople보다 작을경우
maxPeople++;

else if box가 boxing보다 클경우
boxing값을 box로 설정
if maxPeople이 boxPeople보다 클 경우
boxPeople초기화 후 ++
else maxPeople이 boxPeople보다 작을 경우
maxPeople의 값을 boxPeople의 값으로 설정
boxPeople초기화 후 ++
큐가 전부 비었을 경우
값 비교후 최대값 설정

maxPeople값 리턴


에러 핸들링

  1. 뒷사람이 포장을 끝냈어도 앞사람이 끝내지 않았다면 먼저 나갈 수 없습니다
  2. 한 번에 나갈 수 있는 인원 중, 최대 인원을 리턴해야 합니다

-> 큐가 비어있는 경우를 엣지케이스로 설정
-> 반복문의 설정을 queue.peek() != 0으로 설정
-> edgecase로 큐가 비었을경우 Math.max로 비교후 끝내도록 설정

  1. new LinkedList<>(Arrays.asList(boxes)); 메서드를 사용하여 첫반복문생략가능
profile
codestates seb 44th // 다크모드로 보는걸 추천드립니다

0개의 댓글