ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ) 회의실배정
    알고리즘/백준 2020. 7. 11. 20:43
    반응형

    회의실배정

     

    1931번: 회의실배정

    (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

    www.acmicpc.net

    풀이

     

    포스팅하기에는 조금 민망한 코드지만, 정답률이 높지 않아서 포스팅하게 됐다.

    회의가 시작시간과 끝나는 시간이 담겨있는 여러 회의에 대해 요청받는다.

    이 때, 고르게 분포해서 최대한 많은 팀이 회의를 할 수 있게 만들어야한다.

     

    그래서 처음에는 회의 시간이 가장 짧은 순으로 정렬을 했었다.

    하지만, 반례가 존재했고 다시 고민했다.

     

    회의가 끝나는 시간을 기준으로 시작시간이 가장 빠른 순서로 정렬하기로 했다.

    회의가 끝나는 시간이 빠른 회의들 중 가장 회의 시간이 짧은 회의들을 채택하는 방법이다.

    이후, 정렬된 배열을 돌면서 앞선 회의의 끝나는 시간과 같거나 이후인 회의들의 갯수를 count하며 답을 구했다.

     

    코드는 짧지만, 람다식을 이용하지 않았다면 3~4줄은 더 늘었을 것이다.

     

     

    코드

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.StringTokenizer;
    
    public class Main {
        private static class Meeting {
            int start, end;
            public Meeting(int start, int end) {
                this.start = start;
                this.end = end;
            }
        }
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine());
            Meeting[] applies = new Meeting[n];
            for(int i=0; i<n; i++) {
                StringTokenizer st = new StringTokenizer(br.readLine());
                applies[i] = new Meeting(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
            }
    
            br.close();
            solution(n,applies);
        }
    
        private static void solution(int n, Meeting[] applies) {
            int prev =-1;
            int cnt =0;
    
            Arrays.sort(applies,(Meeting m1, Meeting m2) -> m1.end == m2.end ? Integer.compare(m1.start,m2.start) : Integer.compare(m1.end, m2.end));
            for(Meeting meeting : applies) {
                if(prev <= meeting.start) {
                    prev = meeting.end;
                    cnt++;
                }
            }
            System.out.println(cnt);
        }
    }
    반응형

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

    BOJ) 다리 놓기  (0) 2020.07.16
    BOJ) 체스판 위의 공  (2) 2020.07.11
    BOJ) 로프  (0) 2020.07.11
    BOJ) 30 (자바, JAVA)  (0) 2020.07.11
    BOJ) 리모컨  (0) 2020.07.11

    댓글

Designed by Tistory.