ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 회의실 예약(java)
    코딩테스트/softeer 2023. 9. 4. 16:26

    https://softeer.ai/practice/info.do?idx=1&eid=626 

     

    Softeer

    연습문제를 담을 Set을 선택해주세요. 취소 확인

    softeer.ai

    # fillZero
    
    int su = 9;
    String.format("%02d", su);
    
    # compareTo
    
    public int compareTo(Room room){
    	return this.name.compareTo(room.name);
    }
    import java.util.*;
    import java.io.*;
    
    
    public class Main
    {
        public static void main(String args[]) throws IOException
        {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(in.readLine());
            
            int roomCnt = Integer.parseInt(st.nextToken());
            int reservationCnt = Integer.parseInt(st.nextToken());
    
            ArrayList<Room> roomList = new ArrayList<Room>();
            
            for(int i = 0; i<roomCnt; i++){
                roomList.add(new Room(in.readLine()));
            }
    
            for(int i = 0; i<reservationCnt; i++){
                StringTokenizer reservationTokens = new StringTokenizer(in.readLine());
    
                String name = reservationTokens.nextToken();
                int start = Integer.parseInt(reservationTokens.nextToken());
                int end = Integer.parseInt(reservationTokens.nextToken());
    
                for (Room room: roomList){
                    if (room.isSame(name) == true){
                        room.reservation(start, end);
                        break;
                    }
                }
            }
            Collections.sort(roomList);
    
            for (int i = 0; i< roomList.size(); i++){
                for (String text: roomList.get(i).getRoomInfo()){
                    System.out.println(text);
                }
                if(i != roomList.size()-1){
                    System.out.println("-----");
                }
            }
            
        }
    
        public static class Room implements Comparable<Room> {
            private String name;
    
            private int timeCnt = 9;
    
            private int[] reservationArr = new int[timeCnt]; 
    
            public Room (String name){
                this.name = name;
                for(int i = 0; i <timeCnt; i++){
                    reservationArr[i] = 0;
                }
            }
    
            public void reservation(int startTime, int endTime){
                for(int i = getIndex(startTime); i < getIndex(endTime); i++){
                    reservationArr[i] = 1;
                }
            }
    
            private int getIndex(int time){
                return time - timeCnt;
            }
    
            public Boolean isSame(String name){
                return this.name.equals(name);
            }
    
            public int compareTo(Room room){
                return this.name.compareTo(room.name);
            }
    
            public String getAvailableText(int size){
                if (size > 0){
                    return size + " available:";
                }
                return "Not available";
            }
    
            public ArrayList<String> getRoomInfo(){
                ArrayList<String> result = new ArrayList<String>();
                result.add("Room "+ this.name + ":");
                ArrayList<String> availableReservationInfo = getAvailableReservationInfo();
                result.add(getAvailableText(availableReservationInfo.size()));
                result.addAll(availableReservationInfo);
                return result;
            }
    
            public String fillZero(int su){
                return String.format("%02d", su);
            }
            
    
            public ArrayList<String> getAvailableReservationInfo(){
                ArrayList<String> availableReservationInfo = new ArrayList<String>();
                for(int i =0; i <timeCnt; i++){
                    int sum = 0;
                    if(reservationArr[i] == 0){
                        sum += getTotalLength(i);
                        availableReservationInfo.add(fillZero(i+timeCnt) + "-" + (i +sum+timeCnt));
                    }
                    
                    i+= sum;
                }
                return availableReservationInfo;
            }
    
            public int getTotalLength(int targetIndex){
                int result = 1;
                targetIndex += 1;
                if (targetIndex < timeCnt && reservationArr[targetIndex] == 0){
                    result += getTotalLength(targetIndex);
                }
                return result;
            }
        }
    }

    '코딩테스트 > softeer' 카테고리의 다른 글

    순서대로 방문하기  (0) 2023.09.10
    자동차 테스트  (0) 2023.09.10
    바이러스(java)  (0) 2023.09.04
    GBC(java)  (0) 2023.09.04
    전광판(java)  (0) 2023.09.03
Designed by Tistory.