Software Hyena::

[백준 11116번] - 교통량 / C++ 본문

알고리즘/백준

[백준 11116번] - 교통량 / C++

bluehyena 2021. 2. 19. 14:57
반응형

www.acmicpc.net/problem/11116

 

11116번: 교통량

승민이는 마포대교의 교통량이 얼마인지를 측정하고있다. 승민이는 도로 맞은 편을 잇는 두개의 끈을 일정 간격 사이로 매달아 놓았다. 그리고 자동차가 끈위로 지나갈때 끈 끝에 있는 작은

www.acmicpc.net

문제

승민이는 마포대교의 교통량이 얼마인지를 측정하고있다. 승민이는 도로 맞은 편을 잇는 두개의 끈을 일정 간격 사이로 매달아 놓았다. 그리고 자동차가 끈위로 지나갈때 끈 끝에 있는 작은 박스에는 그 때 의 시간이 기록된다. 

예를 들어, 자동차가 왼쪽에서 올 때 네 번의 기록을 얻게 된다.

  • 왼쪽 줄 위로 앞 바퀴가 지나 간 시간 t
  • 왼쪽 줄 위로 뒷 바퀴가 지나 간 시간 t + 500
  • 오른쪽 줄 위로 앞 바퀴가 지나 간 시간 t + 1000
  • 오른쪽 줄 위로 뒷 바퀴가 지나 간 시간 t + 1500

자동차가 오른쪽에서 올 때도 같은 규칙으로 오른쪽과 왼쪽을 바꾸어 측정하면 된다. 주어진 두개의 시간 기록으로 왼쪽에서 얼마나 많은 차가 왔는지 알아내면 된다. 한 끈 위에는 많아야 한 대의 차량이 지나가고 있다.

입력

첫 번째 줄에 n (1 ≤ n ≤ 100) 까지의 테스트 케이스의 개수를 입력 한다.  각각의 테스트 케이스에는 박스에서 측정 된 시간 기록의 개수 m (m ≤ 200)을 입력한다. 다음 줄에는 왼쪽 박스에서 측정된 109 보다 작은 시간 기록 m개를 입력한다. 그 다음 줄에는 오른쪽 박스에서 측정된 109 보다 작은 시간 기록 m개를 입력한다.

출력

각각의 테스트케이스에 대해 왼쪽에서 오는 차의 숫자를 출력한다.

---------------------------------------------------------------------------------------------------------

풀이

<C++>

#include <iostream>

using namespace std;

int arr_right[201];
int arr_left[201];

int main() {
	int n;
	cin >> n;

	for (int j = 0; j < n; ++j) {
		int left_car = 0;
		int m; 
		cin >> m;

		for (int i = 0; i < m; ++i) {
			cin >> arr_left[i];
		}
        
		for (int i = 0; i < m; ++i) {
			cin >> arr_right[i];
		}

		for (int i = 0; i < m-1; ++i) {
			for (int j = i+1; j < m; ++j) {
				if (arr_left[i] + 500 == arr_left[j]) {
					for (int k = 0; k < m; ++k) {
						if (arr_left[j] + 500 == arr_right[k]) {
							left_car += 1;
							break;
						}
					}
				}
			}
		}
		cout << left_car << '\n';
	}
	
	return 0;
}

 

왼쪽에서 자동차가 오든, 오른쪽에서 자동차가 오든 측정시간간의 500의 차이가 존재한다. 문제에서 언급한 t값을 이용하여 풀이를 하도록 하겠다. 완벽한 풀이는 아니고 생각의 흐름대로 푼 풀이이니 참고하시길.

 

1. n값을 입력받고, m값을 입력받은후, 왼쪽의 값, 오른쪽의 값을 각각 입력받은 후 arr_left 와 arr_right 에 값을 넣는다.

2. arr_left의 값중 t 값보다 500이 큰 값이 존재하는지 찾는다.

3. 존재할경우 t + 500 값보다 500이 더 큰, 즉 t + 1000 의 값이 arr_right에 존재하는지 찾는다.

 - 500 차이가 나는 값은 무조건 존재하므로 왼쪽의 값보다 오른쪽의 값이 큰 지만 확인하면 왼쪽에서 온 자동차임이 확실해지기 때문.

4. arr_right 에 값이 존재할 경우 left_car 변수에 1을 더하고 모든 반복이 끝나면 left_car 값을 출력한다.

 

더 좋은 방법이 분명 존재할 것 같다. 더 좋은 방법 있다면 댓글로 알려주세요.. ㅎ

반응형
Comments