ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 - 9019 [C++]
    문제 풀이/백준 2023. 7. 18. 23:06
    반응형

     이 문제는 bfs 를 사용하는 문제이다. 처음에는 이 문제에서 DSLR 연산의 리턴값을 string을 이용해서 구현했으나, 그렇게 하면 시간 초과가 발생하였다. 그래서 정수를 리턴하도록 하여 최대한 연산의 수를 줄였고, 정답을 받을 수 있었다.

     

     

     

    #include <iostream>
    #include <string>
    #include <vector>
    #include <queue>
    #include <utility>
    using namespace std;
    
    int operD(int temp)
    {
    	temp *= 2;
    	temp %= 10000;
    
    	return temp;
    }
    
    int operS(int temp)
    {
    	
    	if (temp == 0)
    	{
    		temp = 9999;
    	}
    	else
    	{
    		temp--;
    	}
    
    	return temp;
    }
    
    int operL(int temp)
    {
    	int result = (temp % 1000 * 10) + temp / 1000;
    
    	return result;
    }
    
    int operR(int temp)
    {
    	int result = (temp / 10) + temp % 10 * 1000;
    
    	return result;
    }
    
    vector<string> visited;
    vector<bool> visited2;
    
    string bfs(int a, int b)
    {
    	queue<int> q;
    
    	visited[a] = "";
    	visited2[a] = true;
    	q.push(a);
    
    	while (!q.empty())
    	{
    		int present = q.front();
    		int next;
    		q.pop();
    
    		if (present == b)
    		{
    			return visited[present];
    		}
    
    		next = operD(present);
    		if (!visited2[next])
    		{
    			visited2[next] = true;
    			visited[next] = visited[present] + "D";
    			q.push(next);
    		}
    
    		next = operS(present);
    		if (!visited2[next])
    		{
    			visited2[next] = true;
    			visited[next] = visited[present] + "S";
    			q.push(next);
    		}
    
    		next = operL(present);
    		if (!visited2[next])
    		{
    			visited2[next] = true;
    			visited[next] = visited[present] + "L";
    			q.push(next);
    		}
    
    		next = operR(present);
    		if (!visited2[next])
    		{
    			visited2[next] = true;
    			visited[next] = visited[present] + "R";
    			q.push(next);
    		}
    	}
    
    	return "";
    }
    
    int main()
    {
    	ios_base::sync_with_stdio(0);
    	cout.tie(0);
    	cin.tie(0);
    
    	int test_case;
    
    	cin >> test_case;
    
    	for (int test = 0; test < test_case; test++)
    	{
    		int a, b;
    		string answer;
    
    		cin >> a >> b;
    
    		visited = vector<string>(10000, "");
    		visited2 = vector<bool>(10000, false);
    
    		answer = bfs(a, b);
    
    		cout << answer << '\n';
    	}
    	
    	return 0;
    }

     

    반응형

    '문제 풀이 > 백준' 카테고리의 다른 글

    백준 - 9466 [C++]  (2) 2023.07.18
    백준 - 2146 [C++]  (0) 2023.07.18
    백준 - 게리맨더링 2 (17779) [C++]  (0) 2023.03.27
    백준 - 낚시왕 (17143) [C++]  (0) 2023.03.26
    백준 - 톱니바퀴 (14891) [C++]  (0) 2023.03.26
Designed by Tistory.