algorithm

BOJ 14500

rkawk 2022. 10. 1. 22:43
๋”๋ณด๊ธฐ

ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ ์„ฑ๊ณต

 
2 ์ดˆ 512 MB 63552 23730 15438 35.571%

๋ฌธ์ œ

ํด๋ฆฌ์˜ค๋ฏธ๋…ธ๋ž€ ํฌ๊ธฐ๊ฐ€ 1×1์ธ ์ •์‚ฌ๊ฐํ˜•์„ ์—ฌ๋Ÿฌ ๊ฐœ ์ด์–ด์„œ ๋ถ™์ธ ๋„ํ˜•์ด๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

  • ์ •์‚ฌ๊ฐํ˜•์€ ์„œ๋กœ ๊ฒน์น˜๋ฉด ์•ˆ ๋œ๋‹ค.
  • ๋„ํ˜•์€ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์ •์‚ฌ๊ฐํ˜•์˜ ๋ณ€๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ๊ผญ์ง“์ ๊ณผ ๊ผญ์ง“์ ๋งŒ ๋งž๋‹ฟ์•„ ์žˆ์œผ๋ฉด ์•ˆ ๋œ๋‹ค.

์ •์‚ฌ๊ฐํ˜• 4๊ฐœ๋ฅผ ์ด์–ด ๋ถ™์ธ ํด๋ฆฌ์˜ค๋ฏธ๋…ธ๋Š” ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ 5๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์•„๋ฆ„์ด๋Š” ํฌ๊ธฐ๊ฐ€ N×M์ธ ์ข…์ด ์œ„์— ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ ํ•˜๋‚˜๋ฅผ ๋†“์œผ๋ ค๊ณ  ํ•œ๋‹ค. ์ข…์ด๋Š” 1×1 ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์˜ ์นธ์—๋Š” ์ •์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์“ฐ์—ฌ ์žˆ๋‹ค.

ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ ํ•˜๋‚˜๋ฅผ ์ ์ ˆํžˆ ๋†“์•„์„œ ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ๊ฐ€ ๋†“์ธ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋“ค์˜ ํ•ฉ์„ ์ตœ๋Œ€๋กœ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ๋Š” ๋ฐ˜๋“œ์‹œ ํ•œ ์ •์‚ฌ๊ฐํ˜•์ด ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ์นธ์„ ํฌํ•จํ•˜๋„๋ก ๋†“์•„์•ผ ํ•˜๋ฉฐ, ํšŒ์ „์ด๋‚˜ ๋Œ€์นญ์„ ์‹œ์ผœ๋„ ๋œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ข…์ด์˜ ์„ธ๋กœ ํฌ๊ธฐ N๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ M์ด ์ฃผ์–ด์ง„๋‹ค. (4 ≤ N, M ≤ 500)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ข…์ด์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. i๋ฒˆ์งธ ์ค„์˜ j๋ฒˆ์งธ ์ˆ˜๋Š” ์œ„์—์„œ๋ถ€ํ„ฐ i๋ฒˆ์งธ ์นธ, ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ j๋ฒˆ์งธ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜์ด๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ์ˆ˜๋Š” 1,000์„ ๋„˜์ง€ ์•Š๋Š” ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ๊ฐ€ ๋†“์ธ ์นธ์— ์“ฐ์ธ ์ˆ˜๋“ค์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

5 5
1 2 3 4 5
5 4 3 2 1
2 3 4 5 6
6 5 4 3 2
1 2 1 2 1

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

19

์˜ˆ์ œ ์ž…๋ ฅ 2 ๋ณต์‚ฌ

4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5

์˜ˆ์ œ ์ถœ๋ ฅ 2 ๋ณต์‚ฌ

20

์˜ˆ์ œ ์ž…๋ ฅ 3 ๋ณต์‚ฌ

4 10
1 2 1 2 1 2 1 2 1 2
2 1 2 1 2 1 2 1 2 1
1 2 1 2 1 2 1 2 1 2
2 1 2 1 2 1 2 1 2 1

์˜ˆ์ œ ์ถœ๋ ฅ 3 ๋ณต์‚ฌ

7

์™„์ „ํƒ์ƒ‰ ๋ฌธ์ œ์ด๊ณ , ์กฐ๊ฑด์— ๋”ฐ๋ผ DFS๋ฅผ ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

ใ…—๋ฅผ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋ชจ์–‘๋“ค์€ ๊ทธ๋ƒฅ DFS์ˆœ๋ฒˆ์ด 4๋ฒˆ์งธ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์ด๊ณ , ใ…— ๋ชจ์–‘์ผ ๊ฒฝ์šฐ๋Š” ๊ทธ ์ด์ „ ๋…ธ๋“œ์—์„œ ๋‹ค์‹œ DFS๋ฅผ ๋Œ๋ ค์ฃผ๋„๋ก ํ•˜์˜€๋‹ค.

 

์ข€๋” ์‹ค๋ ฅ์ด ๋Š˜๋ฉด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

#include <iostream>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
int N, M, dx[4]={1,0,-1,0}, dy[4]={0,1,0,-1}, board[501][501], vis[501][501], ans;

void dfs(pair<int,int>cur, int count, int point){
    if(count == 4){
        ans = max(ans, point);
        return;
    }
    for(int dir=0; dir<4; dir++){
        int nx = cur.first + dx[dir];
        int ny = cur.second + dy[dir];
        if(nx<0||nx>N||ny<0||ny>M) continue;
        if(vis[nx][ny] ) continue;
        vis[nx][ny] = 1;
        dfs({nx,ny}, count+1, point+board[nx][ny]);
        vis[nx][ny] = 0;
    }
    if(count == 3){
        for(int dir=0; dir<4; dir++){
            int nx = cur.first + dx[dir];
            int ny = cur.second + dy[dir];
            if(nx<0||nx>N||ny<0||ny>M) continue;
            if(vis[nx][ny]){
                for(int dir2=0; dir2<4; dir2++){
                    int nx2 = nx + dx[dir];
                    int ny2 = ny + dy[dir];
                    if(nx2<0||nx2>N||ny2<0||ny2>M) continue;
                    if(vis[nx2][ny2]) continue;
                    vis[nx2][ny2] = 1;
                    dfs({nx2, ny2}, count+1, point+board[nx2][ny2]);
                    vis[nx2][ny2] = 0;
                }
                return;
            }
        }
    }
}

int main(){
    cin>>N>>M;
    for(int i=0; i<N; i++)
        for(int j=0; j<M; j++)
            cin>>board[i][j];
    
    for(int i=0; i<N; i++)
        for(int j=0; j<M; j++){
            pair<int,int> cur = {i, j};
            vis[i][j] = 1;
            dfs(cur, 1, board[i][j]);
            vis[i][j] = 0;
        }
    cout<<ans;
}

 

 

'algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ 10942  (1) 2022.10.03
BOJ 11758(CCW)  (1) 2022.10.03
BOJ 1629  (0) 2022.10.01
BOJ 9935  (0) 2022.10.01
BOJ 10830  (1) 2022.10.01