어흥

[백준 7348] 테이블 옮기기 (C++) 본문

알고리즘/백준

[백준 7348] 테이블 옮기기 (C++)

라이언납시오 2020. 3. 18. 18:05
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/7348

 

7348번: 테이블 옮기기

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

www.acmicpc.net

1. 주의할 점

- 처음에 입력받는 숫자가 두번째 숫자보다 클 수도 있다

- 서로 마주보는 숫자는 공통된 통로를 지닌다

 

2. 구현

- 1-2, 3-4, 5-6,...,399-400이 같은 복도를 지닌다 -> 모두 1씩 빼고 2로 나눴을때 같은 몫을 가진다

- 출발 방과 도착 방번호를 입력받은 후, 출발 방이 작은 숫자가 되도록 바꾼다

- [(출발 방-1)/2,(도착 방-1)/2] 까지 DP배열의 값을 1씩 증가시킨다

- DP배열에서 가장 큰값 *10을 출력한다

 

#include <iostream>
#include <algorithm>
using namespace std;
int dp[200];
int main() {
	int test, num, start, destination;
	cin >> test;
	for (int t = 0; t < test; t++) {
		for (int i = 0; i < 200; i++)
			dp[i] = 0;
		cin >> num;
		for (int k = 0; k < num; k++) {
			cin >> start >> destination;
			int temp;
			if (start > destination) {
				temp = destination;
				destination = start;
				start = temp;
			}
			start = (start - 1) / 2;
			destination = (destination - 1) / 2;
			for (int i = start; i <= destination; i++)
				dp[i] += 10;
		}
		int result = 0;
		for (int i = 0; i < 200; i++)
			result = max(result, dp[i]);
		cout << result << '\n';
	}
	system("pause");
	return 0;
}
728x90
반응형
Comments