Algorithm/Softeer

[Softeer] [21년 재직자 대회 예선] 회의실 예약

cks._.hong 2024. 2. 2. 01:30
 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class 회의실_예약 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        List<String> room = new ArrayList<>();
        boolean[][] isReservation = new boolean[N][10];

        for(int i = 0; i < N; i++) {
            room.add(br.readLine());
        }
        Collections.sort(room);

        for(int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int roomNumber = room.indexOf(st.nextToken());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());

            for(int j = start; j < end; j++) {
                isReservation[roomNumber][j - 9] = true;
            }
        }
        List<String> answer = new ArrayList<>();
        for(int i = 0; i < N; i++) {
            answer.clear();
            System.out.println("Room " + room.get(i) + ":");
            String temp = "";
            for(int j = 0; j < 10; j++) {
                if(isReservation[i][j]) {
                    if(!temp.isEmpty()) {
                        answer.add(temp + "-" + "1" + (j - 1));
                        temp = "";
                    }
                } else {
                    if(temp.isEmpty()) {
                        if (j == 0) {
                            temp = "09";
                        } else {
                            temp = "1" + (j - 1);
                        }
                    }
                }
            }
            if(!temp.isEmpty() && !temp.equals("18")) {
                answer.add(temp + "-18");
            }
            if(answer.isEmpty()) {
                System.out.println("Not available");
            } else {
                System.out.println(answer.size() + " available:");
                for (String s : answer) {
                    System.out.println(s);
                }
            }
            if(i != N - 1) {
                System.out.println("-----");
            }
        }
    }
}
  • 2차원 배열을 사용해서 각 회의실의 예약 시간을 체크했다.
  • for문 2개로 모두 방문해보며 비어있는 회의 시간을 탐색하여 answer에 push 해주었다.
  • 비어있는 시간에 대한 탐색은 비어있는 시간이 존재할 때 temp에 해당 시간을 넣고 예약 시간을 만날 때까지 탐색을 진행한다. 
  • 비어있는 시간 ~ 예약 시간까지가 이용가능한 회의 시간이라 판단하게 된다.