반응형

 

[광고 누르면 오늘의 행운 상승!!]

https://www.acmicpc.net/problem/7348

 

7348번: 테이블 옮기기

문제 ACM 회사는 아래 그림과 같은 빌딩의 한 층을 빌렸다. 이 층의 방들은 다음과 같이 번호가 매겨져 있다. 그림처럼 이 층에는 복도를 따라 양쪽 사이드로 각각 200개의 방이 있다. ACM 회사는 이 방들을 리모델링하려는 계획을 세웠다. 당연히 어떤 방에서 다른 방으로 많은 테이블을 옮겨야 한다. 이때 복도는 좁고 테이블이 커서 단지 하나의 테이블만 이 복도를 지날 수 있다. 방에서 다른 방으로 테이블을 옮기는 데 소요되는 시간은 10분 이다. i

www.acmicpc.net

회의실 배정과 유사한 문제

같은 복도를 공유하는 시간대가 있으면 최소작업시간이 늘어난다.

같은 시간을 공유할 수 있는(겹치지 않는) 작업끼리 모아서 해결한다.

package Study0319;

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

public class 테이블옮기기 {

	public static class Table implements Comparable<Table> {
		int s;
		int t;
		int l;

		public Table(int s, int t) {
			if (s < t) {
				this.s = s;
				this.t = t;
			} else {
				this.s = t;
				this.t = s;
			}
			this.l = Math.abs(s - t);
		}

		@Override
		public int compareTo(Table o) {
			if (s == o.s)
				return Integer.compare(l, o.l);
			return Integer.compare(s, o.s);
		}
	};

	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("test.txt"));
		Scanner sc = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		int T = sc.nextInt();
		int s, t;
		List<Table> list = new ArrayList<>();
		for (int tc = 0; tc < T; tc++) {
			int N = sc.nextInt();
			for (int i = 0; i < N; i++) {
				s = (sc.nextInt()-1)/2;
				t = (sc.nextInt()-1)/2;
				list.add(new Table(s, t));
			}

			int ans = 0;
			Collections.sort(list);
			while (!list.isEmpty()) {
				t = Integer.MIN_VALUE;
				ans+=10;
				List<Table> tmp = new ArrayList<>();
				for (int i = 0; i < list.size(); i++) {
					if (list.get(i).s > t) {
							t = list.get(i).t;
					}else {
						tmp.add(list.get(i));
					}
				}
				list = tmp;
			}
			System.out.println(ans);
		}
	}
}
반응형

+ Recent posts