ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 - 치킨 배달 (15686) [C++]
    문제 풀이/백준 2024. 3. 26. 15:28
    반응형

    이 문제는 구현 문제이다.

     

    이 문제에서 시간 복잡도는 13Cm * 2N * m 이다. 

    13C6이나 13C7 일 때 1,719로 가장 큰데, 이 때도 약 100만 밖에 되지 않으므로 충분히 1초 안에 풀 수 있다.

     

    처음에는 bfs를 생각했으나, 치킨 거리를 수식으로 한번에 알 수 있으므로 시간 복잡도만 늘리는 꼴이었다는 것을 깨달았고 단순히 구현하여 해결할 수 있었다.

     

    집과 치킨집을 입력에서 받아 배열로 따로 저장한 뒤, 치킨집에서 M개를 선택해 치킨 거리를 측정하는 방식으로 구현했다.

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <utility>
    using namespace std;
    
    #define MAX 50
    #define INF 1000000000
    
    int N, M;
    vector<pair<int, int>> house;
    vector<pair<int, int>> chicken;
    
    int absolute(int a) {
    	if (a < 0) {
    		return -a;
    	}
    	return a;
    }
    
    int pick(vector<pair<int, int>> &temp, int index) {
    	if (temp.size() == M) {
    		// some action
    		int result = 0;
    
    		for (pair<int, int> &presentHouse : house) {
    			int dist = INF;
    
    			for (pair<int, int> &chick : temp) {
    				int presentDist = absolute(chick.first - presentHouse.first)
    					+ absolute(chick.second - presentHouse.second);
    				
    				dist = min(dist, presentDist);
    			}
    
    			result += dist;
    		}
    
    		return result;
    	}
    
    	int result = INF;
    	for (int i = index + 1; i < chicken.size(); i++) {
    		temp.push_back(chicken[i]);
    		result = min(result, pick(temp, i));
    		temp.pop_back();
    	}
    
    	return result;
    }
    
    int main() {
    	ios_base::sync_with_stdio(0);
    	cin.tie(0);
    	cout.tie(0);
    
    	cin >> N >> M;
    
    	for (int y = 1; y <= N; y++) {
    		for (int x = 1; x <= N; x++) {
    			int num;
    			cin >> num;
    
    			if (num == 1) {
    				house.push_back({ y, x });
    			} else if (num == 2) {
    				chicken.push_back({ y, x });
    			}
    		}
    	}
    
    	vector<pair<int, int>> temp;
    	int answer = pick(temp, -1);
    	cout << answer << '\n';
    
    	return 0;
    }
    반응형
Designed by Tistory.