๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/BOJ

[BOJ] #9205 ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ

by dar0m! 2019. 10. 15.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 128 MB 32.625%

 

 

9205๋ฒˆ: ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ

๋ฌธ์ œ ์†ก๋„์— ์‚ฌ๋Š” ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ์†ก๋„์—์„œ ์—ด๋ฆฌ๋Š” ํŽœํƒ€ํฌํŠธ ๋ฝ ํŽ˜์Šคํ‹ฐ๋ฒŒ์— ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์˜ฌํ•ด๋Š” ๋งฅ์ฃผ๋ฅผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ถœ๋ฐœ์€ ์ƒ๊ทผ์ด๋„ค ์ง‘์—์„œ ํ•˜๊ณ , ๋งฅ์ฃผ ํ•œ ๋ฐ•์Šค๋ฅผ ๋“ค๊ณ  ์ถœ๋ฐœํ•œ๋‹ค. ๋งฅ์ฃผ ํ•œ ๋ฐ•์Šค์—๋Š” ๋งฅ์ฃผ๊ฐ€ 20๊ฐœ ๋“ค์–ด์žˆ๋‹ค. ๋ชฉ์ด ๋งˆ๋ฅด๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— 50๋ฏธํ„ฐ์— ํ•œ ๋ณ‘์”ฉ ๋งˆ์‹œ๋ ค๊ณ  ํ•œ๋‹ค. ์ƒ๊ทผ์ด์˜ ์ง‘์—์„œ ํŽ˜์Šคํ‹ฐ๋ฒŒ์ด ์—ด๋ฆฌ๋Š” ๊ณณ์€ ๋งค์šฐ ๋จผ ๊ฑฐ๋ฆฌ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ๋งฅ์ฃผ๋ฅผ ๋” ๊ตฌ๋งคํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฏธ๋ฆฌ ์ธํ„ฐ๋„ท์œผ๋กœ ์กฐ์‚ฌ๋ฅผ ํ•ด๋ณด๋‹ˆ ๋‹คํ–‰ํžˆ๋„ ๋งฅ์ฃผ๋ฅผ ํŒŒ๋Š” ํŽธ์˜

www.acmicpc.net

 

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

๊ฐ ์ขŒํ‘œ๋Š” ๋‘ ์ •์ˆ˜ x์™€ y๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. (๋‘ ๊ฐ’ ๋ชจ๋‘ ๋ฏธํ„ฐ, -32768 ≤ x, y ≤ 32767)

์ด ์กฐ๊ฑด๋Œ€๋กœ ์ด์ฐจ์›๋ฐฐ์—ด์„ ๋งŒ๋“œ๋ ค๊ณ  ํ•˜๋‹ˆ ํ• ๋‹น์กฐ์ฐจ์•ˆ๋˜๋Š” ํฌ๊ธฐ์—ฌ์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ ๊ณ ๋ฏผ์„ ํ–ˆ๋Š”๋ฐ ์ ๋“ค๊ณผ ์ ๋“ค ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋งฅ์ฃผ 20๋ณ‘์„ ๋‹ค ๋งˆ์‹œ์ง€ ์•Š๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ผ๋ฉด ๋‘ ์ ์ด ์—ฐ๊ฒฐ๋๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์— ์–‘๋ฐฉํ–ฅ์—ฐ๊ฒฐ์„ ํ•ด์ฃผ๊ณ , ์—ฐ๊ฒฐ์„ ๋ชจ๋‘ ๋งˆ์นœ ๋’ค DFS๋ฅผ ๋Œ๋ ค์„œ ๋งˆ์ง€๋ง‰ ๋„์ฐฉ์ง€๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด happy, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด sad๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
1992 KB 0 ms
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring> //memset
using namespace std;
const int MAX = 100 + 2//์ถœ๋ฐœ์ , ๋„์ฐฉ์  ํฌํ•จ
int N;
vector<int> graph[MAX]; //์ด์ฐจ์› ๋ฐฐ์—ด
bool visited[MAX];
 
//๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ
int distance(pair<intint> p1, pair<intint> p2)
{
    return abs(p1.first - p2.first) + abs(p1.second - p2.second);
}
 
//์ „ํ˜•์ ์ธ DFS
void DFS(int node)
{
    visited[node] = true;
    for (int i = 0; i < graph[node].size(); i++)
    {
        int next = graph[node][i];
        if (visited[next] == false)
            DFS(next);
    }
}
 
int main(void)
{
    int t;
    scanf("%d"&t);
 
    while(t--)
    {
        for (int i = 0; i < MAX; i++)
            graph[i].clear();
 
        memset(visited, falsesizeof(visited));
        cin >> N;
        vector<pair<intint>> coord;
 
        //์ถœ๋ฐœ์ (0), ๋„์ฐฉ์ (N + 1) ํฌํ•จ
        for (int j = 0, x, y; j < N + 2; j++)
        {
            scanf("%d %d"&x, &y);
            coord.push_back({ x, y });
        }
 
        //๋งฅ์ฃผ 20๋ณ‘์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ ๋‚ด์— ์žˆ์œผ๋ฉด ๊ทธ๋ž˜ํ”„์— ์ถ”๊ฐ€
        for (int j = 0; j < N + 2; j++)
            for (int k = j + 1; k < N + 2; k++)
                if (distance(coord[j], coord[k]) <= 50 * 20)
                {
                    //์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„
                    graph[j].push_back(k);
                    graph[k].push_back(j);
                }
        DFS(0);
        //0์ด ์ถœ๋ฐœ์ , N+1์ด ๋„์ฐฉ์ ์ด๋ฏ€๋กœ
        if (visited[N + 1])
            cout << "happy\n";
        else
            cout << "sad\n";
    }
    return 0;
}
cs

 

๋Œ“๊ธ€