algorithm

๋ฐฑ์ค€ 3190

rkawk 2025. 3. 30. 21:28

https://www.acmicpc.net/problem/3190

 

ํ’€์ด

  • ๋จผ์ € ๋ฑ€์€ ๋ชธ๊ธธ์ด๋ฅผ ๋Š˜๋ ค ๋จธ๋ฆฌ๋ฅผ ๋‹ค์Œ์นธ์— ์œ„์น˜์‹œํ‚จ๋‹ค.
  • ๋งŒ์•ฝ ๋ฒฝ์ด๋‚˜ ์ž๊ธฐ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„์ด ๋๋‚œ๋‹ค.
  • ๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ ์นธ์— ์žˆ๋˜ ์‚ฌ๊ณผ๊ฐ€ ์—†์–ด์ง€๊ณ  ๊ผฌ๋ฆฌ๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.
  • ๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค„์—ฌ์„œ ๊ผฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ์นธ์„ ๋น„์›Œ์ค€๋‹ค. ์ฆ‰, ๋ชธ๊ธธ์ด๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์Œ ์ˆœ์„œ์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

๋ฑ€ ์ „์ฒด ์นธ์„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ , Queue์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’์ด ๋จธ๋ฆฌ, ์™ธ๋ถ€ ๋ณ€์ˆ˜์— ๊ผฌ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋จธ๋ฆฌ๊ฐ€ ์›€์ง์ด๋Š” ๋ฐฉํ–ฅ ๊ทธ๋Œ€๋กœ ๊ผฌ๋ฆฌ๊ฐ€ ์›€์ง์ด๋„๋ก dirb ๋ฐฐ์—ด์— ๋จธ๋ฆฌ๊ฐ€ ์›€์ง์ด๋Š” ๋ฐฉํ–ฅ์„ ๋„ฃ์–ด์คฌ๋‹ค.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;
// 1ํ–‰ 1์—ด์ด ๊ธฐ์ค€!!!!!!
// L์€ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „, D๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „
// ์˜ค ์•„ ์™ผ ์œ„
int N, K, L, board[101][101], dx[4]={0,1,0,-1}, dy[4]={1,0,-1,0}, dirb[101][101], vis[101][101];
char dir_change[10001];

int main(){
    cin>>N>>K;
    for (int i=0; i<K; i++) {
        int x, y; cin>>x>>y;
        board[x][y] = 1;
        // apple
    }
    cin>>L;
    for (int i=0; i<L; i++) {
        int X; char C;
        cin>>X; cin>>C;
        dir_change[X] = C;
    }
    // ๋ฑ€์€ ์ฒ˜์Œ์— ์˜ค๋ฅธ์ชฝ์„ ํ–ฅํ•œ๋‹ค.

    queue<pair<int,int> >q;
    q.push(make_pair(1, 1));
    vis[1][1] = 1;
    int sec = 0, dir = 0, tx=1, ty = 1;
    while (!q.empty()) {
        auto cur = q.front(); q.pop();
        sec += 1;
        // ๋จธ๋ฆฌ๋ฅผ ๋‹ค์Œ์นธ์— ์œ„์น˜์‹œํ‚ด
        dirb[cur.first][cur.second] = dir;
        int nx = cur.first + dx[dir];
        int ny = cur.second + dy[dir];


        // ๋ฒฝ์ด๋‚˜ ์ž๊ธฐ ์ž์‹ ํ•œํ…Œ ๋‹ฟ์•˜์„ ๊ฒฝ์šฐ
        if (nx > N || nx <= 0 || ny > N || ny <= 0 || vis[nx][ny]) break;

        // ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ ์ฒดํฌ
        if (!board[nx][ny]){
            // ์—†์„ ๊ฒฝ์šฐ ๊ผฌ๋ฆฌ๋ฅผ ์ด๋™.
            vis[tx][ty] = 0;
            int dir_s = dirb[tx][ty];
            tx += dx[dir_s];
            ty += dy[dir_s];
        }else {
            // ์žˆ์„๊ฒฝ์šฐ
            board[nx][ny] = 0;
        }

        if (dir_change[sec] == 'D') dir = (dir+1)%4;
        if (dir_change[sec] == 'L') {
            dir -= 1;
            if (dir == -1) dir += 4;
        }

        vis[nx][ny] = 1;
        q.push(make_pair(nx, ny));
    }
    cout<<sec;

}

 

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

๋ฐฑ์ค€ 14499  (0) 2025.04.03
๋ฐฑ์ค€ 13458  (0) 2025.03.30
๋ฐฑ์ค€ 12100 (์‚ผ์„ฑ ๊ธฐ์ถœ)  (0) 2025.03.28
27. Remove Element  (0) 2025.03.21
DP - ์•„์ดํ…œ์„ ์ ์ ˆํžˆ ๊ณ ๋ฅด๋Š” ๋ฌธ์ œ  (0) 2025.03.21