ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ) 김식당
    알고리즘/백준 2020. 6. 9. 23:23
    반응형

    김식당

     

    14612번: 김식당

    인하대학교 축제를 맞이하여 알고리즘 동아리 CTP에서는 식당을 열기로 하였다. 요리는 세진이가 하게 되었고, 주문을 받는 것은 한솔이가 하게 되었다. 식당의 음식이 너무 맛있어서 주문은 끊�

    www.acmicpc.net

    풀이

     

    sleep을 출력하는 부분에서 조금 시간이 걸렸지만, 오래 걸리지 않고 풀었다.

    처음에는 sleep을 모든 명령이 끝난 후에만 출력해줬었는데, 중간에 식당이 쉬고있는 기간에 sleep을 출력해줘야 한다는 것을 알고 고쳤다.

    처음에 배열로 할까 생각하다가, 조금 복잡해질 것 같아서 ArrayList를 이용해서 풀었다.

    그러다 보니 테이블 number인 m이 필요가 없었다. 

     

    로직

    1. 주문 수를 입력받는다.

    2. 주문에 따라서 order, sort, complete를 구분해준다.

     2-1. order의 경우, ArrayList에 테이블 번호와 조리 시간을 int[]에 담는다.

     2-2. sort의 경우, ArrayList에 담겨있는 변수에 대해 조리시간 오름차순으로 정렬한다. 조리 시간이 같은 경우 테이블 번호 오름차순.

     2-3. complete의 경우, ArrayList에 담겨있는 변수 중 테이블 번호가 같은 변수를 지운다.

    3. 주문 수행 완료 후, ArrayList에 변수가 담겨있으면 변수를, 변수가 없다면 sleep을 출력한다.

     

    코드

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    public class KimRestaurant_14612 {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String str = br.readLine();
            int n = Integer.parseInt(str.split(" ")[0]); // 주문 수
            int m = Integer.parseInt(str.split(" ")[1]); // 테이블 수
            String[] orderArr = new String[n];
    
            for(int i=0; i<n; i++) {
                orderArr[i] = br.readLine();
            }
    
            solution(orderArr, m);
    
            br.close();
        }
    
        private static void solution(String[] orderArr, int m) {
            ArrayList<int[]> tableList = new ArrayList<>();
            for(String order : orderArr) {
                String[] cmdArr = order.split(" ");
                if(cmdArr[0].equals("order")) {
                    tableList.add(new int[]{Integer.parseInt(cmdArr[1]),Integer.parseInt(cmdArr[2])});
                } else if(cmdArr[0].equals("sort")) {
                    Collections.sort(tableList, new Comparator<int[]>() {
                        @Override
                        public int compare(int[] o1, int[] o2) {
                            if(o1[1] > o2[1]) {
                                return 1;
                            } else if(o1[1] == o2[1]) {
                                return o1[0] > o2[0] ? 1 : -1;
                            }
                            return -1;
                        }
                    });
                } else {    // complete
                    for(int i=0; i<tableList.size(); i++) {
                        if(tableList.get(i)[0] == Integer.parseInt(cmdArr[1])) {
                            tableList.remove(i);
                            break;
                        }
                    }
                }
                if(tableList.size() >0) {
                    StringBuffer sb = new StringBuffer();
                    for(int i=0; i<tableList.size(); i++) {
                        sb.append(tableList.get(i)[0]);
                        if(i <tableList.size()-1) {
                            sb.append(" ");
                        }
                    }
                    System.out.println(sb.toString());
                } else {
                    System.out.println("sleep");
                }
            }
        }
    }
    반응형

    '알고리즘 > 백준' 카테고리의 다른 글

    BOJ) 좋은 대회  (0) 2020.06.11
    BOJ) 비트 우정지수  (0) 2020.06.10
    BOJ) 도로와 신호등  (0) 2020.06.10
    BOJ) Crazy_aRcade_Good (크레이지 아케이드)  (0) 2020.06.09
    BOJ) 부분수열의 합 2  (2) 2020.06.03

    댓글

Designed by Tistory.