굥뷰를 햡시댜

[BOJ - 17839] Baba is Rabbit 본문

알고리즘 문제 풀이/BOJ 문제 풀이

[BOJ - 17839] Baba is Rabbit

GodZ 2019. 11. 16. 00:51

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

 

17839번: Baba is Rabbit

문제 원이는 요즘 유행하는 게임을 하고 있다. 이 게임은 is 라는 단어를 이용해 어떤 사물을 다른 사물로 바꿀 수 있다. 규칙은 다음과 같다. 게임 시작 시 몇 개의 명령을 설정해놓는다. 이 때, 모든 명령의 형태는 p is q 의 형태이며, p, q는 사물이다. 두 사물 p, q에 대해 p is q 라는 명령은 사물 p를 사물 q로 바꾼다. 이러한 행위를 명령을 적용한다고 부른다. 어떤 사물 p에 대해 적용할 수 있는 명령이 두 가지 이상이면, 그 중

www.acmicpc.net

 

문자열과 완전 탐색 알고리즘을 응용해보기 위한 문제인것 같다.

 

처음 입력을 받으면서 하나의 map을 생성해주었다.

 

그리고 다음으로 bfs로 완전 탐색하면서 Baba가 나올 수 있는 모든 경우의 수를 고려해줬다.

 

- 풀이 방법

1. 입력 받는다.

 

2. map을 만들어준다.

 

3. bfs 탐색

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>

using namespace std;

int n;
map<string, vector<string>> dict;
map<string, int> visited;
queue<string> q;

int main(void) {

	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	cin >> n;

	for (int i = 0; i < n; i++) {
		string p, is, q;
		cin >> p >> is >> q;
		
		dict[p].push_back(q);
	}

	string Baba = "Baba";

	vector<string> ans;

	q.push("Baba");

	while (!q.empty()) {
		string cur = q.front();
		q.pop();

		for (int i = 0; i < dict[cur].size(); i++) {
			if (visited[dict[cur][i]] != 0) continue;
			visited[dict[cur][i]] += 1;
			ans.push_back(dict[cur][i]);
			q.push(dict[cur][i]);
		}
	}

	sort(ans.begin(), ans.end());

	for (int i = 0; i < ans.size(); i++) {
		if(ans[i] != "")
			cout << ans[i] << "\n";
	}

	getchar();
	getchar();

	return 0;
}

'알고리즘 문제 풀이 > BOJ 문제 풀이' 카테고리의 다른 글

[BOJ - 15666] N과 M(12)  (0) 2019.11.13
[BOJ - 15665] N과 M(11)  (0) 2019.11.13
[BOJ - 15664] N과 M(10)  (0) 2019.11.13
[BOJ - 15663] N과 M(9)  (0) 2019.11.13
[BOJ - 15658] N과 M(8)  (0) 2019.11.13
Comments