Koder / 박성훈
article thumbnail

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

 

2002번: 추월

입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이

www.acmicpc.net

자료구조 문제.

차량 번호로 주어지는 문자열을 숫자에 매칭시켜줘야 한다.

처음 N줄에 들어오는 문자열들을 1부터 차례대로 숫자에 매칭시켜주고,

다음 N줄에 들어오는 문자열들을 앞서 매칭시켰던것을 이용해서 하나의 숫자 배열로 바꿔준다.

 

숫자 배열을 비교하면서 탐색하는데,

자기 자신의 뒤에서 자기 자신보다 적은 번호를 매칭받은 번호판이 있다면

자기 자신이 반드시 그 번호판의 차량을 추월했다는 뜻이므로

정답으로 카운팅해주면 된다.

 

매칭에는 std::map을 사용했다.

 

#include <bits/stdc++.h>
using namespace std;

int arr[1234] = {0};
map<string,int> m;

int main(){
	cin.sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int N;
	int ans = 0;
	string s;
	
	cin >> N;
	for(int i=1; i<=N; i++){
		cin >> s;
		m[s] = i;
	}
	
	for(int i=0; i<N; i++){
		cin >> s;
		arr[i] = m[s];
	}
	
	for(int i=0; i<N; i++){
		for(int j=i+1; j<N; j++){
			if(arr[j] < arr[i]){
				ans++;
				break;
			}
		}
	}
	
	cout << ans;
	return 0;
}
반응형