알고리즘 단련장/소프티어

[소프티어] 회의실 예약 레벨2 자바 풀이 (21년 재직자 대회 예선)

snapcoder 2024. 7. 19. 05:35
728x90
반응형
SMALL

 

 

https://softeer.ai/practice/6266

 

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

 

softeer.ai

 

문제스펙

 

 

제출결과

 

 

 

예시1로 풀이

- 3개의 방 배열 저장

- 예약테이블 배열 선언 int[][] check = new int[n][18];

- 7개의 반복문 통해, 예약테이블에 시작시간기준 1로 회의실 예약현황 저장 (예약된 회의실)

- (예약테이블, 회의시작시각, 회의종료시각) 변수 선언 int[][] table = new int[18][3];

- 조건문 통해서 회의 시작~종료 시각 체크

- 시작시각, 종료시각 인 경우, 각각 예쁘게 출력

 

 

 

 

전체 코드

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        String[] name = new String[n];
        for(int i=0; i<n; i++){
            name[i] = br.readLine();
        }
        Collections.sort(Arrays.asList(name));

        int[][] check = new int[n][18];

        for(int i=0; i<n; i++){
            for(int j=9; j<18; j++){
                check[i][j] = 0;
            }
        }
        
        for(int i=0; i<m; i++){
            st = new StringTokenizer(br.readLine());
            String a = st.nextToken();
            int b = Integer.parseInt(st.nextToken());
            int c = Integer.parseInt(st.nextToken());

            int index = Arrays.asList(name).indexOf(a);
            for(int j=b; j<c; j++){
                check[index][j] = 1; // 예약
            }
        }

        // for(int i=0; i<n; i++){
        //     for(int j=0; j<18; j++){
        //            System.out.print("=====" + check[i][j] ) ;
        //     }
        //     System.out.println("========\n\n") ;
        // }

        for(int i=0; i<n; i++){
            bw.write( "Room " + name[i] + ":\n" );

            int[][] table = new int[18][3];
            int leftCnt = 0;
            boolean leftFlag = true;
            boolean rightFlag = false;
            for(int j=9; j<18; j++){
                table[j][0] = check[i][j];
                table[j][1] = 0;
                table[j][2] = 0;
                if(table[j][0] == 0 && leftFlag && !rightFlag){ // 좌측경계
                    table[j][1] = 1;
                    leftFlag = false;
                    rightFlag = true;
                    leftCnt++;
                }
                if(table[j][0] == 1 && !leftFlag && table[j-1][0]==0 && rightFlag){ // 우측경계
                    table[j-1][2] = 1;
                    rightFlag = false;
                    leftFlag = true;
                }
                if(table[j][0] == 0 && !leftFlag && j==17 && rightFlag){ // 우측 끝
                    table[j][2] = 1;
                    rightFlag = false;
                    leftFlag = true;
                }
            
            }

            // System.out.println();
            // System.out.println(" leftCnt " + leftCnt);
            // System.out.println();
            
            
            
            // int pos = 0;
            // for(int j=0; j<9; j++){
            //     if(table.charAt(j) == '0');
            // }
            
            // for(int j=tb0; j<table.length(); j++){
            //     break;
            // }
            
            // while( tb0 >= 0 ){
            //     System.out.println("========tb0==" + tb0);
            //     
            //     int tb1 = Arrays.asList(table).indexOf('1');
            //     System.out.println("========tb1==" + tb1);
            //     bw.write((tb0+9) + "-" + (tb1+9));
            //     table = (String)Arrays.asList(table).subString(1);
            // }
            
            int totalCnt = 0;
            int left = 0;
            int right = 0;
            int lineCnt = 0;
            if(leftCnt > 0){
                bw.write(leftCnt + " available:\n");
                for(int j=9; j<18; j++){
                    // System.out.println("=====-===table==="+table[j][0] + ", " + table[j][1] + ", " + table[j][2]);
                    if(table[j][1] == 1){
                        bw.write(String.format("%02d", j));
                        bw.write("-");
                    }
                    if(table[j][2] == 1){
                        bw.write(String.format("%02d", j+1));
                        lineCnt++;
                        if(lineCnt != leftCnt){
                            bw.newLine();    
                        }
                    }
                    
                    // bw.newLine();
                }
                // for(int q=0; q<totalCnt; q++){
                //     bw.newLine();
                //     bw.write(ava[q][0] + "-" + ava[q][1]);
                // }
            }else{
                bw.write("Not available");
            }
            bw.newLine();
            if(i!=n-1) bw.write(String.valueOf("-----"));
            if(i!=n-1) bw.newLine();
        }
        
        bw.close();
    }
}
728x90
반응형
LIST