반응형
Language: Java(자바)

Java(자바)로 구현한 회의실 예약
| 회사에는 N개의 회의실이 있다. 수많은 팀이 모여 토론하고 업무를 처리하기 위해서는 회의실이 필수적이다. 내부망에 아주 간단한 회의실 예약 시스템이 있지만 편의성이 매우 떨어진다. 단순히 예약된 회의의 목록만 표시되기 때문에, 방 별로 비어 있는 시간이 언제인지를 확인하기가 힘든 것이다. 당신은 이를 직접 해결해 보기로 마음 먹었다. 회의실 이용 규칙은 다음과 같다: 회의실은 9시부터 18시까지만 사용 가능하다. 모든 회의의 시간은 이 안에 완전히 포함되어야 한다. 회의는 정확히 한 회의실을 연속한 일정 시간 동안만 점유한다. 즉 각 회의는 (회의실, 시작 시각, 종료 시각)의 정보로 나타낼 수 있다. 회의의 시작과 종료 시각은 시(時, hour) 단위로만 설정 가능하다. 같은 회의실을 사용하는 회의 시간은 서로 겹칠 수 없다. 여기서 겹친다는 것은, 두 회의 모두에 포함되는 시간이 1시간 이상 존재한다는 것을 의미한다. 예를 들어, 10시-12시의 회의와 11시-13시의 회의는 겹치는데, 11시-12시의 시간이 두 회의 모두에 포함되기 때문이다. 한 회의가 끝나는 시각에, 같은 회의실에서 다른 회의가 시작하는 것은 허용된다. 이 경우 두 회의가 겹치지 않기 때문이다. 길이가 0인 회의, 즉 시작 시각과 종료 시각이 동일한 회의는 예약된 바 없으며, 새롭게 잡을 수도 없다. 이미 예약된 M개의 회의에 대한 정보가 주어지면, 회의실별로 비어 있는 시간대를 정리해 출력하는 프로그램을 작성해 보자. 구체적인 형식은 아래의 을 참고하시오. 3 7 grandeur avante sonata sonata 14 16 grandeur 11 12 avante 15 18 sonata 10 11 avante 9 12 grandeur 16 18 avante 12 15 출처 : https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=626 |
static int start_time = 9;
static int end_time = 18-start_time;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str);
int meetingRoomNum = Integer.parseInt(st.nextToken());
int meetingCnt = Integer.parseInt(st.nextToken());
HashMap<String, boolean[]> map = new HashMap<String, boolean[]>();
boolean[][] timeArr = new boolean[meetingRoomNum][end_time];
ArrayList<String> roomList = new ArrayList<String>();
//미팅룸 설정
for(int i=0; i<meetingRoomNum; i++) {
str = br.readLine();
st = new StringTokenizer(str);
String meetingRoom = st.nextToken();
roomList.add(meetingRoom);
map.put(meetingRoom, timeArr[i]);
}
//미팅룸에 해당하는 회의시간 설정
for(int i=0; i<meetingCnt; i++) {
str = br.readLine();
st = new StringTokenizer(str);
String meetingRoom = st.nextToken();
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
boolean[] value = map.get(meetingRoom);
for(int k=start-start_time; k<end-start_time; k++) {
value[k] = true;
}
map.put(meetingRoom, value);
}
Collections.sort(roomList);
for(int idx = 0; idx < roomList.size(); idx++) {
String room = roomList.get(idx);
System.out.println("Room "+room+":");
boolean[] value = map.get(room);
int availableCnt = 0;
ArrayList<String> str_list = new ArrayList<String>();
int prev = -1;
for(int k=0; k<end_time; k++) {
if(!value[k]) { //회의실이 비어 있으면
if(prev == -1) {
prev = k;
availableCnt++;
} else {
if(k == end_time-1) {
int start = start_time + prev;
int end = start_time +k +1;
String start_str = (start < 10) ? "0"+Integer.toString(start) : Integer.toString(start);
str_list.add(start_str +"-"+end);
}
}
} else {
if(prev != -1) {
int start = start_time + prev;
int end = start_time +k;
String start_str = (start < 10) ? "0"+Integer.toString(start) : Integer.toString(start);
str_list.add(start_str +"-"+end);
prev = -1;
}
}
}
if(availableCnt == 0) {
System.out.println("Not available");
} else {
System.out.println(availableCnt+" available:");
Iterator<String> iter = str_list.iterator();
while(iter.hasNext()) {
System.out.println(iter.next().toString());
}
}
if(roomList.size() != idx+1) {
System.out.println("-----");
}반응형
'Java' 카테고리의 다른 글
| Android - Nested RecyclerView (0) | 2022.03.15 |
|---|---|
| Coding - Smart Robot (0) | 2022.02.02 |