๐Ÿ’œ๊ฐœ๋ฐœ๊ณผ ์ผ์ƒ (โ‰ง∇โ‰ฆ)๏พ‰

[๋ฐฑ์ค€ c++] 1937 ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค (๊ณจ3) ๋ณธ๋ฌธ

CS/๋ฐฑ์ค€

[๋ฐฑ์ค€ c++] 1937 ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค (๊ณจ3)

๊ฐ•์˜์„œ 2023. 11. 15. 15:35

์ „ํ˜•์ ์ธ ๊ตฌํ˜„ ํƒ์ƒ‰ DFS ์˜€์Šต๋‹ˆ๋‹ค.

// ์š•์‹ฌ์Ÿ์ด ํŒ๋‹ค - ๊ตฌํ˜„

#include <iostream>
#include <algorithm>

using namespace std;

int N, result;

int board[501][501];
long long score[501][501];

// ์ƒ, ํ•˜, ์ขŒ, ์šฐ ์ค‘ ํ•œ ๊ณณ์œผ๋กœ ์ด๋™
int dx[4] = {0,0,-1,1};
int dy[4] = {1,-1,0,0};

int DFS(int x, int y){
    
    if(score[x][y] == 0){
        score[x][y] =1;
        
        int cnt = 0;
        for(int i = 0; i < 4; i++){
            
            int nx = x + dx[i];
            int ny = y + dy[i];
            
            if(nx >= 0 && nx < N && ny >= 0 && ny < N){
                
                if(board[nx][ny] > board[x][y]){
                    
                    cnt = max(cnt, DFS(nx,ny));
                
                }
            }
        }
        score[x][y] += cnt;
    }
    
    return score[x][y];
}

int main(){
    
    //n × n์˜ ํฌ๊ธฐ์˜ ๋Œ€๋‚˜๋ฌด ์ˆฒ
    //๋Œ€๋‚˜๋ฌด๋ฅผ ๋จน๊ณ  ์ž๋ฆฌ๋ฅผ ์˜ฎ๊ธฐ๋ฉด ๊ทธ ์˜ฎ๊ธด ์ง€์—ญ์— ๊ทธ ์ „ ์ง€์—ญ๋ณด๋‹ค ๋Œ€๋‚˜๋ฌด๊ฐ€ ๋งŽ์ด ์žˆ์–ด์•ผํ•จ
    
    // ์–ด๋–ค ์ง€์ ์— ์ฒ˜์Œ์— ํ’€์–ด ๋†“์•„์•ผ ํ•˜๊ณ , ์–ด๋–ค ๊ณณ์œผ๋กœ ์ด๋™์„ ์‹œ์ผœ์•ผ ํŒ๋‹ค๊ฐ€ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์นธ์„ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š”์ง€
    // ์ด ํŒ๋‹ค๊ฐ€ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์นธ์„ ์ด๋™ํ•˜๋ ค๋ฉด ์–ด๋–ค ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•˜์—ฌ ์›€์ง์—ฌ์•ผ ํ•˜๋Š”์ง€
    cin >> N;
    result = -1;
    
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            cin >> board[i][j];
        }
    }
    
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            int temp = DFS(i,j);
            
            if(temp > result) result = temp;
        }
    }
    
    cout << result << endl;

    return 0;
}