-
[BOJ / C++] 11116번 : 교통량Study (etc)/Problem Solving 2023. 1. 14. 23:41
문제
승민이는 마포대교의 교통량이 얼마인지를 측정하고있다. 승민이는 도로 맞은 편을 잇는 두개의 끈을 일정 간격 사이로 매달아 놓았다. 그리고 자동차가 끈위로 지나갈때 끈 끝에 있는 작은 박스에는 그 때 의 시간이 기록된다.
예를 들어, 자동차가 왼쪽에서 올 때 네 번의 기록을 얻게 된다.
- 왼쪽 줄 위로 앞 바퀴가 지나 간 시간 t
- 왼쪽 줄 위로 뒷 바퀴가 지나 간 시간 t + 500
- 오른쪽 줄 위로 앞 바퀴가 지나 간 시간 t + 1000
- 오른쪽 줄 위로 뒷 바퀴가 지나 간 시간 t + 1500
자동차가 오른쪽에서 올 때도 같은 규칙으로 오른쪽과 왼쪽을 바꾸어 측정하면 된다. 주어진 두개의 시간 기록으로 왼쪽에서 얼마나 많은 차가 왔는지 알아내면 된다. 한 끈 위에는 많아야 한 대의 차량이 지나가고 있다.
입력
첫 번째 줄에 n (1 ≤ n ≤ 100) 까지의 테스트 케이스의 개수를 입력 한다. 각각의 테스트 케이스에는 박스에서 측정 된 시간 기록의 개수 m (m ≤ 200)을 입력한다. 다음 줄에는 왼쪽 박스에서 측정된 109 보다 작은 시간 기록 m개를 입력한다. 그 다음 줄에는 오른쪽 박스에서 측정된 109 보다 작은 시간 기록 m개를 입력한다.
출력
각각의 테스트케이스에 대해 왼쪽에서 오는 차의 숫자를 출력한다.
Solved.ac 레벨
실버 V
풀이
#include <bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int t; cin >> t; while(t--){ int m, cnt = 0; vector<int> left; vector<int> right; cin >> m; for(int i = 0; i < m; i++){ int input; cin >> input; left.push_back(input); } for(int i = 0; i < m; i++){ int input; cin >> input; right.push_back(input); } for(int i = 1; i < m; i++){ for(int j = 0; j < m - 1; j++){ if(left[i] - left[j] == 500){ for(int k = 0; k < m; k++){ if(left[i] + 500 == right[k]){ cnt++; break; } } } } } cout << cnt << "\n"; } return 0; }
왼쪽 선을 앞바퀴가 밟고 뒷바퀴가 밟았을 때의 차가 500이고, 왼쪽 선을 뒷바퀴가 밟은 시점에 500을 더했을 때 값이 존재한다면 왼쪽에서 온 차라고 판별할 수 있다.
따라서 왼쪽 선을 밟은 시간값과 오른쪽 선을 밟은 시간값을 각각 별도로 받아 반복문에서 대입해보며 판별하면 된다.
11116번: 교통량
첫 번째 줄에 n (1 ≤ n ≤ 100) 까지의 테스트 케이스의 개수를 입력 한다. 각각의 테스트 케이스에는 박스에서 측정 된 시간 기록의 개수 m (m ≤ 200)을 입력한다. 다음 줄에는 왼쪽 박스에서
www.acmicpc.net
'Study (etc) > Problem Solving' 카테고리의 다른 글
[BOJ / C++] 5596번 : 시험 점수 (0) 2023.01.14 [BOJ / C++] 4470번 : 줄번호 (0) 2023.01.14 [BOJ / C++] 5555번 : 반지 (2) 2023.01.06 [BOJ / C++] 1969번 : DNA (2) 2023.01.05 [BOJ / C++] 10156번 : 과자 (1) 2023.01.05