Java : 회의실 배정

cad·2022년 1월 11일
0

Algorithm

목록 보기
15/33

문제

풀이

  • 끝나는 시간 -> 시작하는 시간 순서로 오름차순 정렬한다.
  • 왜냐하면 빨리 끝나는 대로 최대 횟수로 회의를 할 수 있기 때문이다.
  • 끝->시작 으로 정렬되면 시작 시간을 비교하면서

    이전 회의가 끝나는 시간과 비교하면서 회의를 할 수 있으면 (t.start >= endTime)
    회의를 하고 (cnt++)
    끝나는 시간을 갱신해주면 된다.(endTime = t.end)

잡담

  • 파이썬에서 자바로 넘어오면서 2차원배열 정렬하는 법을 몰랐다.
  • 이번에 Comparable 인터페이스 사용법을 처음 익혔는데 아직도 조금 헷갈린다.
1. this.data - o.data 이면 오름차순 
2. o.data - this.data 이면 내림차순

(이번 문제 정렬 방법)
2차원 배열 : 두 번째 값이 같으면 첫 번째는 오름차순
	다르면 두 번째는 오름차순
3. if(o.data2 == this.data2) this.data1 - o.data2
   else this.data2 - o.data2

자바 정렬 도움 사이트

전체 코드

package inflearn;

import java.util.*;

public class I0902 {
  static int n;
  static ArrayList<Times> arr;

  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    n = sc.nextInt();
    arr = new ArrayList<>();
    for (int i = 0; i < n; i++) {
      int h = sc.nextInt();
      int w = sc.nextInt();

      arr.add(new Times(h, w));
    }
    System.out.println(sol(arr));
  }

  static int sol(ArrayList<Times> arr) {
    int ans = 0;
    Collections.sort(arr);

    int endTime = 0;

    for (Times t : arr) {
      if (t.start >= endTime) {
        ans++;
        endTime = t.end;
      }
    }

    return ans;
  }

  static class Times implements Comparable<Times> {
    int start, end;

    public Times(int start, int end) {
      this.start = start;
      this.end = end;
    }

    @Override
    public int compareTo(Times o) {
      if (this.end == o.end) {
        return this.start - o.start;
      } else {
        return this.end - o.end;
      }
    }
  }
}
profile
Dare mighty things!

0개의 댓글