๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/4๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv4] : ์ง€ํ˜• ์ด๋™

by Jaeguk 2022. 7. 11.
๋ฌธ์ œ ๋งํฌ

https://school.programmers.co.kr/learn/courses/30/lessons/62050

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๋ชจ๋“  ์นธ์— ๋ฐฉ๋ฌธํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ๋‹ค๋ฆฌ ์„ค์น˜ ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ์ž.

 

ํ’€์ด

๋ชจ๋“  ์นธ์—์„œ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋†’์ด ์ฐจ๊ฐ€ ์ฃผ์–ด์ง„ height ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ๊ทธ๋ƒฅ ์ด๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋†’์ด ์ฐจ๊ฐ€ height ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๋†’์ด ์ฐจ์ด๋งŒํผ์˜ ๋น„์šฉ์„ ๋‚ด๊ณ  ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.

 

๊ฐ ์นธ์„ ์ •์ ์œผ๋กœ ๋ดค์„ ๋•Œ, ๋ชจ๋“  ์ •์ ์„ ์ด์–ด์ง€๋„๋ก ํ•˜๋Š” ๊ธธ์„ ์ฐพ์•„์•ผํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ž„์˜์˜ ์นธ์„ ๊ธฐ์ค€์œผ๋กœ ์ƒํ•˜์ขŒ์šฐ ์นธ์œผ๋กœ ๊ฐ„์„ ์ด ์ด์–ด์ ธ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋†’์ด์ฐจ๊ฐ€ height ์ดํ•˜๋ฉด ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ 0์ด๊ณ  height๋ณด๋‹ค ํฌ๋ฉด ๋†’์ด ์ฐจ ๋งŒํผ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๋ถ™๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋•Œ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž‘์€ ๊ฒƒ๋ถ€ํ„ฐ ์ฐจ๋ก€์ฐจ๋ ˆ ์ด๋™ํ•˜๋ฉด์„œ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋„๋ก ํ•˜๋ฉด ๋œ๋‹ค.

์‹œ์ž‘์ ์€ ์–ด๋””๋“  ์ƒ๊ด€์—†๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ, ๋ชจ๋“  ์นธ์„ ์ด์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค ์–ด๋””์„œ ์ถœ๋ฐœํ•˜๋“  ์ƒ๊ด€์ด ์—†๋‹ค.

๋‚˜๋Š” ํŽธ์˜์ƒ ๋งจ ์™ผ์ชฝ ๋งจ ์œ—์นธ (0, 0)์„ ์‹œ์ž‘์ ์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

 

(0,0)์œผ๋กœ ์‹œ์ž‘ํ•ด์„œ ์ธ์ ‘ํ•œ ์นธ๊ณผ์˜ ๊ฐ„์„ ์„ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค. ์ด๋•Œ ์ •๋ ฌ๊ธฐ์ค€์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ํ•ด์„œ ๊ฐ„์„ ์˜ ๋น„์šฉ์ด ์ž‘์€ ๊ฒƒ๋ถ€ํ„ฐ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์นธ์€ ์Šคํ‚ตํ•ด์ฃผ๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์นธ์ด๋ผ๋ฉด ์ƒํ•˜์ขŒ์šฐ ์ธ์ ‘ํ•œ ์นธ๊ณผ์˜ ๊ฐ„์„ ์„ ์šฐ์„ ์ˆœ์œ„ํ์— ๊ณ„์†ํ•ด์„œ ๋„ฃ์–ด์ค€๋‹ค.

 

์ฝ”๋“œ ์ž‘์„ฑ
 
#include <bits/stdc++.h>
using namespace std;
int dx[] = {0,1,0,-1};
int dy[] = {-1,0,1,0};
 
bool is_ok(pair<int,int> pos, const int& N){
    if(pos.first < 0 || pos.first >= N || pos.second < 0 || pos.second >= N)
        return false;
    return true;
}
 
int solution(vector<vector<int>> land, int height) {
    int answer = 0;
    int N = land.size();
    bool visited[301][301];
    memset(visited,false,sizeof(visited));
    
    priority_queue<pair<intpair<int,int>>> pq;
    pq.push({0, {0,0}});
    while(!pq.empty()){
        pair<int,int> now = pq.top().second;
        int cost = -pq.top().first;
        pq.pop();
        if(visited[now.first][now.second])
            continue;
        visited[now.first][now.second] = true;
        answer += cost;
        for(int i = 0; i<4; i++){
            pair<int,int> next = {now.first + dy[i], now.second + dx[i]};
            if(!is_ok(next, N))
                continue;
            int acost = 0;
            if(abs(land[now.first][now.second] - land[next.first][next.second]) > height)
                acost = abs(land[now.first][now.second] - land[next.first][next.second]);
            pq.push({-acost,next});
        }
    }
    
    return answer;
}
cs

 

๋‚˜๋Š” BFS๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ์นธ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ–ˆ์ง€๋งŒ, ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ์ •์ ์„ ์ž‡๋Š” ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

728x90