문제
승민이는 마포대교의 교통량이 얼마인지를 측정하고있다. 승민이는 도로 맞은 편을 잇는 두개의 끈을 일정 간격 사이로 매달아 놓았다. 그리고 자동차가 끈위로 지나갈때 끈 끝에 있는 작은 박스에는 그 때 의 시간이 기록된다.
예를 들어, 자동차가 왼쪽에서 올 때 네 번의 기록을 얻게 된다.
- 왼쪽 줄 위로 앞 바퀴가 지나 간 시간 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을 더했을 때 값이 존재한다면 왼쪽에서 온 차라고 판별할 수 있다.
따라서 왼쪽 선을 밟은 시간값과 오른쪽 선을 밟은 시간값을 각각 별도로 받아 반복문에서 대입해보며 판별하면 된다.
'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 |