짱아의 개발 기록장

[Algorithm] 삼성전자 코딩테스트 - 치킨 배달(c++) 본문

Algorithm/삼성 sw 역량테스트 기출

[Algorithm] 삼성전자 코딩테스트 - 치킨 배달(c++)

jungahshin 2020. 10. 8. 15:11
반응형

전체 치킨집을 vector에 넣고 "조합"을 사용하여 m만큼의 치킨집을 선택하여 도시의 치킨거리를 구하는 방식으로 구현했다.

 

자세한 부분은 코드를 보면 알 수 있다.

 

코드 첨부

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// 치킨 배달
#include <iostream>
#include <vector>
#include <climits>
 
using namespace std;
 
int n, m;
int city[51][51= {0, };
vector<pair<intint>> chicken;
int visited[2500= {0, };
vector<pair<intint>> real_chick;
int ans = INT_MAX;
 
void cal()
{
    int total = 0;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            if(city[i][j]==1){
                int dist = INT_MAX;
                for(int k=0; k<real_chick.size(); k++){
                    int temp = abs(real_chick[k].first-i)+abs(real_chick[k].second-j);
                    dist = min(dist, temp);
                }
                total += dist;
            }
        }
    }
 
    ans = min(ans, total);
}
 
void choose(int idx, int num)
{
    if(num==m){
        real_chick.clear();
        for(int i=0; i<chicken.size(); i++){
            if(visited[i]==true){
                real_chick.push_back(make_pair(chicken[i].first, chicken[i].second));
            }
        }
        cal();
        return;
    }
 
    for(int i=idx; i<chicken.size(); i++){
        if(visited[i]==truecontinue;
        visited[i] = true;
        choose(i, num+1);
        visited[i] = false;
    }
}
 
int main()
{
    cin>>n>>m;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cin>>city[i][j];
            if(city[i][j]==2){
                chicken.push_back(make_pair(i, j));
            }
        }
    }
 
    choose(00);
 
    cout<<ans<<"\n";
    return 0;
}
cs

 

 

문제 첨부

www.acmicpc.net/problem/15686

 

15686번: 치킨 배달

크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸

www.acmicpc.net

반응형
Comments