문제 https://www.acmicpc.net/problem/2002
2002번: 추월
입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이
www.acmicpc.net
풀이
map 사용하는 문제에 재미 들렸다 ㅎ
먼저 map에 입력되는 차량 번호와 순서(0~n의 값을 갖는 각 차량의 번호표)를 저장한다.
추월하지 않았다면 들어와야 했을 번호를 idx에 저장한다.
배열을 생성해서 차가 터널에서 나가면 앞서 저장한 번호표에 해당하는 인덱스로 가서 1을 입력한다.
(3번 번호표를 갖는 차가 나가면 arr[3]의 값을 1로 변경. 이 과정이 없으면 이미 나간 3번 차례를 계속 기다리게 될 수 있다.)
idx부터 시작해서 배열의 값이 1인 동안 idx를 계속 증가시킨다. (배열의 값이 1이면 이미 빠져나간 차이므로)
현재 나가는 차가 idx와 다르다면 추월을 한 차일 것이므로 cnt를 증가한다.
코드
#include <iostream>
#include <map>
#include <string>
using namespace std;
int arr[1001];
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
map<string,int> m;
int n;
cin>>n;
for(int i=0; i<n; i++)
{
string s;
cin>>s;
m.insert({s,i});
}
int idx=0, cnt=0;
for(int i=0; i<n; i++)
{
string s;
cin>>s;
while(arr[idx]!=0 && idx<n) idx++;
arr[m[s]]=1;
if(m[s]!=idx) cnt++;
else idx++;
}
cout<<cnt;
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
SWEA 7701 - 염라대왕의 이름 정렬(C++) (0) | 2022.09.02 |
---|---|
백준 18870 - 좌표 압축(C++) (0) | 2022.08.27 |
백준 13414 - 수강신청(C++) (0) | 2022.08.14 |
SWEA - 힙 (STL 사용 X) (0) | 2022.08.09 |
SWEA - 공통조상 (C++) (0) | 2022.08.04 |