본문 바로가기

BOJ

백준 9205 / 맥주 마시면서 걸어가기


굉장히 쉬운 문제인데 어렵게 해석해서 고생했던 문제다.



집 좌표와 편의점 좌표, 펜타포트 좌표를 받고.



BFS를 활용하여 펜타포트에 도착할수 있는지, 아니면 각 편의점에 도착할 수 있는지 판단하여


현재 지점에서 갈 수 있는 편의점의 위치를 큐에 넣어주면 된다.


편의점을 방문했는지 확인하는 bool 배열이 필요하다.



코드


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
72
73
74
75
76
77
78
79
80
81
82
83
84
#include<stdio.h>
#include<iostream>
#include<vector>
#include<queue>
#include<math.h>
#include<memory.h>
 
using namespace std;
 
bool check[103];
 
 
bool mat(int x, int y, int gx, int gy) {
 
    int dist = abs(gy - y) + abs(gx - x);
 
    if (dist <= 1000) {
        return true;
    }
 
    return false;
}
int main() {
 
    //freopen("Text.txt", "r", stdin);
 
    int testcase;
    cin >> testcase;
 
    while (testcase--) {
 
        memset(check, falsesizeof(check));
 
        int shopnum;
        cin >> shopnum;
        vector<pair<intint>>arr;
 
        for (int i = 0; i < shopnum + 2; i++) {
 
            int x, y;
 
            cin >> x >> y;
            arr.push_back(make_pair(x, y));
 
        }
 
        queue<pair<intint>>q;
 
        q.push(make_pair(arr[0].first, arr[0].second));
        check[0= true;
 
        bool ending = false;
 
        while (!q.empty()) {
            int x = q.front().first;
            int y = q.front().second;
            q.pop();
 
            int gx = arr[shopnum + 1].first;
            int gy = arr[shopnum + 1].second;
 
            if (mat(x, y, gx, gy) == true) {
                ending = true;
            }
 
            for (int i = 1; i < shopnum + 1; i++) {
                int sx = arr[i].first;
                int sy = arr[i].second;
 
                if (mat(x, y, sx, sy) == true && check[i] == false) {
                    check[i] = true;
                    q.push(make_pair(sx, sy));
                }
 
            }
        }
 
        if (ending == true) {
            cout << "happy" << endl;
        }
        else
            cout << "sad" << endl;
    }
}
cs


'BOJ' 카테고리의 다른 글

백준 5719 / 거의 최단 경로  (0) 2019.01.17
백준 1753 / 최단경로  (0) 2019.01.13
백준 11559 / Puyo Puyo  (0) 2019.01.11
백준 1726 / 로봇  (0) 2019.01.10
백준 9372 / 상근이의 여행  (0) 2019.01.09