[백준/BOJ] 백준 20292번 : 컨설팅
2021. 3. 25. 15:52ㆍ알고리즘 문제풀이
multimap<string, string> write_from_to 와 multimap<string, string> write_to_from 에 write 정보를 저장하고, set<string> read에 read 정보를 저장하여 문제를 해결했다. 그리고 WAIT가 나오면 기록된 정보들을 지우는 방법으로 문제를 해결했다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
#include <string>
#include <set>
#include <map>
using namespace std;
multimap<string, string> write_from_to;
multimap<string, string> write_to_from;
multimap<string, string>::iterator it;
set<string> read;
vector<string> result;
void Pre()
{
write_from_to.clear();
write_to_from.clear();
read.clear();
}
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
while (1)
{
string input;
getline(cin, input);
string a, b;
int index1;
int index2;
int index3;
if (input[0] == 'E')
{
result.push_back(input);
break;
}
if (input[0] == 'W')
{
index1 = input.find(" ");
index2 = input.find(" ", index1 + 1);
index3 = input.find(" ", index2 + 1);
a = input.substr(index1 + 1, index2 - (index1 + 1));
b = input.substr(index3 + 1, input.size() - (index3 + 1));
//read with write 조건1
if (read.count(b) != 0)
{
result.push_back("WAIT");
Pre();
}
//read with write 조건2 + 교착상태 조건
else if (write_from_to.count(b) != 0 || write_to_from.count(a) != 0)
{
result.push_back("WAIT");
Pre();
}
//write with write 조건1 + write with write 조건2
else if (write_to_from.count(b) != 0 || write_to_from.count(a) != 0)
{
result.push_back("WAIT");
Pre();
}
write_from_to.insert(make_pair(a, b));
write_to_from.insert(make_pair(b, a));
result.push_back(input);
}
else if (input[0] == 'R')
{
index1 = input.find(" ");
a = input.substr(index1 + 1, input.size() - (index1 + 1));
//read with write 조건1
if (write_to_from.count(a) != 0)
{
result.push_back("WAIT");
Pre();
}
read.insert(a);
result.push_back(input);
}
}
for (int i = 0; i < result.size(); i++)
cout << result[i] << "\n";
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 1107번 : 리모컨 (0) | 2021.03.25 |
---|---|
[백준/BOJ] 백준 2923번 : 숫자 게임 (0) | 2021.03.25 |
[백준/BOJ] 백준 17092번 : 색칠 공부 (0) | 2021.03.25 |
[백준/BOJ] 백준 20210번 : 파일 탐색기 (0) | 2021.03.25 |
[백준/BOJ] 백준 15999번 : 뒤집기 (0) | 2021.03.25 |