[백준12789-자바/우선순위큐] 도키도키 간식드리미

2024. 3. 20. 23:57·문제 풀이/백준 문제풀이
728x90
반응형
SMALL

 

위 문제는 글이 매우 길다. 이러한 문제들은 글에서 힌트를 얻을 수 있기 때문에 입력과 출력조건을 읽기전에 천천히 읽어보자.

 

 

이런 힌트를 확인할 수 있다.

이 글을 제대로 읽지 않았다면 홀로 외롭게 재귀문제라고 판단되어 열심히 무한호출 코드를 돌리고있을것이다....(절대 경험담 아님)

 

이 힌트외에는 꼼꼼히 파악해야 할 부분이 하나 더 있다.

해당 순서가 아닌 사람들은 1열로 들어갈 수 있는 공간에 차례대로 집어넣는다.

대기열에서 해당 순번인 사람을 꺼낼 때 해당 순번인지 스택에서도 확인하는 절차가 필요하다.

예를 들어 , 13245 의 입력을 받았다. 대기열에는 13245가 순서대로 서있는것이다.

위 문제대로 풀어보면 다음과 같다.

1. 1번이 바로 입장한다. 3245가 대기열에 있다.

2. 3번은 다음 순서가 아니기때문에 스택에 들어간다. 대기열(245) , 스택(3)

3. 2번 순서는 대기열에 있기 때문에 2를 입장시킨다. 대기열(45) 스택(3)

4. 3번 순서는 대기열이 아닌 스택에 있다. 스택에서 3을 입장시킨다. 대기열(45) << 이 과정을 가장 많이 빼먹는 부분
...
5. 순서대로 4,5가 입장한다.

 

절차는 아래와 같다.

1. 문제를 자세히 읽고 힌트 파악

2. 입력에서 학생들의 수를 파악한다. N은 최대 1000이다. 모든 입력을 한 번씩만 순회하면 되기에 O(N)의 시간복잡도를 갖는다.

3. 대기열과 1열로 들어갈수 있는 공간을 만들어서 조건에 맞게 코드를 구현해준다.

package Stack;

import java.util.*;

public class StackP12789 {
    static int N;
    static Queue<Integer> list ;
    static Stack<Integer> st ;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        /*
         *   현재 줄 서있는곳  (Queue)
         *    한 명씩 서 있을 수 있는 곳 (Stack)
         *
         *   1. 현재 줄 서 있는곳의 인원을 모두 빼서 1부터 차례대로 입장
         *   2. 순서가 아닌 사람들은 Stack으로 이동
         *   3. Stack에서 순서대로 입장(순서대로 입장이 안되면 Sad)
         *
         *  실수한 점
         *  2번에서 이동 후 stack에 이미 사람이 있다면 stack에서도 번호가 일치하는지 추가로 확인해야함
         * */

        N = sc.nextInt();
        list = new LinkedList<>();
        st = new Stack<>();



        for (int i = 0; i < N; i++) {
            list.add(sc.nextInt());
        }

        int idx = 1;
        while (list.size() != 0) {
            if(list.peek()==idx) {
                list.poll();
                idx++;

            }else if(!st.isEmpty() && st.peek() == idx){
                st.pop();
                idx++;
            }

            else {
                st.push(list.poll());
            }
        }

        while (!st.isEmpty()) {
            if (st.peek() == idx) {
                st.pop();
                idx++;
            }
            else{
                break;
            }
        }

        System.out.println(st.isEmpty()?"Nice" : "Sad");

    }
}
728x90
반응형
SMALL

'문제 풀이 > 백준 문제풀이' 카테고리의 다른 글

[백준11047 - Java] 구현 - 주사위 굴리기  (1) 2024.04.23
[백준11047 - Java] 동전 0 Greedy 알고리즘으로 풀  (1) 2024.03.26
[백준 1427 - 자바/ 선택정렬] 소트인사이드  (0) 2024.03.20
[백준 - 1715/ java] 카드정렬하기 - 우선순위 큐  (0) 2024.03.18
[백준 2164-Java ] 카드2 + Queue에 대한 설명  (0) 2024.03.17
'문제 풀이/백준 문제풀이' 카테고리의 다른 글
  • [백준11047 - Java] 구현 - 주사위 굴리기
  • [백준11047 - Java] 동전 0 Greedy 알고리즘으로 풀
  • [백준 1427 - 자바/ 선택정렬] 소트인사이드
  • [백준 - 1715/ java] 카드정렬하기 - 우선순위 큐
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • 면접 준비 (22)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Til
      springsecurity
      java
      HTML
      jsp기초
      자바스크립트
      백준
      자바기초
      프로그래머스
      자바 면접질문
      자바
      CSS
      Spring Data Redis
      redis 채팅
      JSP
      리눅스마스터2급
      자바 알고리즘
      JS
      Spring
      자바 면접
      레디스
      자바 반복문
      jsp request
      리눅스
      Springframework
      리눅스마스터2급정리
      redis
      JavaScript
      스프링프레임워크
      spring redis
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [백준12789-자바/우선순위큐] 도키도키 간식드리미
    상단으로

    티스토리툴바