์ƒˆ์†Œ์‹

์•Œ๊ณ ๋ฆฌ์ฆ˜/BaekJoon

[C++] BOJ 3190๋ฒˆ: ๋ฑ€

  • -
728x90

๋ฌธ์ œ

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

์‚ฌ๊ณผ์˜ ์œ„์น˜์™€ ๋ฑ€์˜ ์ด๋™๊ฒฝ๋กœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ด ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋ผ.

 

*์ฒ˜์Œ ๋ดค์„๋•Œ ํ„ด์— ๊ด€ํ•œ ๊ฐœ๋…์ด ์ž˜ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ ํ„ด์€ ๋ฌด์กฐ๊ฑด ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ์‹œ์Šคํ…œ์ด๋‹ค.

 

 

์ž…๋ ฅ 1

6
3
3 4
2 5
5 3
3
3 D
15 L
17 D

์ถœ๋ ฅ 1

9

 

์ž…๋ ฅ 2

10
4
1 2
1 3
1 4
1 5
4
8 D
10 D
11 D
13 L

์ถœ๋ ฅ 2

21

 

์ž…๋ ฅ 3

10
5
1 5
1 3
1 2
1 6
1 7
4
8 D
10 D
11 D
13 L

์ถœ๋ ฅ 3

13

 

 

์ฝ”๋“œ

#include<iostream>
//#include<Windows.h>
#include<deque>
#include<vector>

using namespace std;

int main() {
    
    int N, K,L;     //N : ๋ณด๋“œ์˜ ํฌ๊ธฐ, K : ๋‹ค์Œ ์ค„์— ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜, L : ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ํšŸ์ˆ˜
    int column, row;
    int currentX=0, currentY=0;
    int arrIdx = 0, turnIdx=0;          //arrIdx : ๋ฐฉํ–ฅ๋ฐฐ์—ด ์ธ๋ฑ์Šค, turnIdx : ๋ฐฉํ–ฅ ํšŒ์ „๋ฐฐ์—ด ์ธ๋ฑ์Šค
    int arrow[4][2] = { {1,0},              //์˜ค๋ฅธ์ชฝ
                        {0,1},              //์•„๋ž˜
                        {-1,0},             //์™ผ์ชฝ
                        {0,-1} };           //์œ„
    deque<vector<int>> body;

    cin >> N;

    //ํ•ด๋‹น ๋ฐฐ์—ด๋งŒํผ 2์ฐจ์› ํ–‰๋ ฌ ๋งŒ๋“ค๊ธฐ
    int** board = new int* [N];
    for (int i = 0; i < N; i++) {
        board[i] = new int[N];
    }
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            board[i][j] = 0;
        }
    }

    board[0][0] = 1;
    vector<int> point;
    point.push_back(0);
    point.push_back(0);
    body.push_back(point);

    cin >> K;
    for (int i = 0; i < K; i++) {
        cin >> row >> column;
        board[row-1][column-1] = 2;
    }
    cin >> L;
    int* turn = new int[L];
    int* direction = new int[L];
    int lValue;
    char rValue;

    for (int i = 0; i < L; i++) {
        cin >> lValue >> rValue;
        turn[i] = lValue;
        direction[i] = rValue;
    }

    int time = 0;

    while (time < 10000) {
    
        /* {
            Sleep(1000);
            system("cls");

            cout << "Time :" << time+1 << endl;
            //์ถœ๋ ฅํ•ด์„œ ํ™•์ธํ•˜๊ธฐ
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    cout << board[i][j] << " ";
                }
                printf("\n");
            }
        }*/
        
        if (time == turn[turnIdx] && time != 0) {
            if (direction[turnIdx] == 'D') {
                arrIdx++;
            }
            if (direction[turnIdx] == 'L') {
                arrIdx--;
            }
            turnIdx++;
        }


        if (arrIdx > 3)
            arrIdx = arrIdx % 4;
        if (arrIdx < 0) {
            arrIdx = 4 + arrIdx;
        }

        //์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ
        currentX += arrow[arrIdx][0];
        currentY += arrow[arrIdx][1];
       
        if ((currentX < 0 || currentX >= N) ||(currentY < 0 || currentY >= N))
            break;
        if (board[currentY][currentX] == 1)
            break;

        if (board[currentY][currentX] == 2) {
            //๋งŒ์•ฝ ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด
            point.clear();
            point.push_back(currentY);
            point.push_back(currentX);
            body.push_front(point);

            for (size_t i = 0; i < body.size(); i++) {
                board[body[i][0]][body[i][1]] = 1;
            }
        }
        else {
            //๋งจ๋์˜ ๊ฐ’์˜ ์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ
            board[body.back()[0]][body.back()[1]] = 0;
            //์ฒ˜์Œ์˜ ๊ฐ’์„ ๋’ค๋กœ ๋ฐ€์–ด์ฃผ๊ธฐ

            for (size_t  i = body.size() - 1; i >0 ; i--) {
                int temp = body[i-1][0];
                body[i][0] = temp;
                temp = body[i-1][1];
                body[i][1] = temp;
            }

            //์ฒซ๋ฒˆ์งธ ๋จธ๋ฆฌ์›€์ง์ด๊ธฐ
            body[0][0]= currentY;
            body[0][1]= currentX;

            for (size_t i = 0; i < body.size(); i++) {
                board[body[i][0]][body[i][1]] = 1;
            }
        }

        time++;
    }

    cout << time + 1;

    //ํ• ๋‹น ํ•ด์ œ
    for (int i = 0; i < N; i++)
        delete[] board[i];

    return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

ํ„ด์— ๊ด€ํ•œ ๊ฐœ๋…์ด ์ฒ˜์Œ์— ์žกํžˆ์ง€ ์•Š์•„์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ค„ ์•Œ๊ณ  ์‹œ๊ฐ„์„ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ๋‹ค.

    Sleep(1000);
    system("cls");

    cout << "Time :" << time+1 << endl;
    //์ถœ๋ ฅํ•ด์„œ ํ™•์ธํ•˜๊ธฐ
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            cout << board[i][j] << " ";
        }
        printf("\n");
    }

์ด๋ถ€๋ถ„์˜ ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ๋นผ๋ฉด ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ์˜ 3๊ฐœ์˜ ์ถœ๋ ฅ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

0์ด ๋นˆ์นธ์ด๊ณ  1์€ ๋ฑ€, 2๋Š” ์‚ฌ๊ณผ์ด๋‹ค.

 

์˜ˆ์ œ 1
์˜ˆ์ œ 2
์˜ˆ์ œ 3

์‚ฌ์‹ค ์—ฌ๊ธฐ๊นŒ์ง€ ์™€์„œ ์˜ˆ์ œ๋ฅผ ๋„ฃ์–ด๋ณด์•˜์„ ๋•Œ ์ œ์ถœ์„ ํ•˜๋‹ˆ๊นŒ ํ‹€๋ฆฐ๊ฒƒ์œผ๋กœ ๋‚˜์™”์—ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ํ•ด๋ณด์ง€ ์•Š์•„์„œ ๊ทธ๋Ÿฐ๋ฐ ๋ฐ˜๋ก€ ์ผ€์ด์Šค๋ฅผ ๋ชจ์•„๋†“์€ ์‚ฌ์ดํŠธ๋ฅผ ์ฐพ์•˜๋‹ค.

https://www.acmicpc.net/board/view/56469

 

๊ธ€ ์ฝ๊ธฐ - ๋ฑ€ ๋ฌธ์ œ ๋ฐ˜๋ก€๋ชจ์Œ์ž…๋‹ˆ๋‹ค

๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

www.acmicpc.net

๋‚˜์˜ ๊ฒฝ์šฐ ๋งจ ์ฒ˜์Œ ๋ฐ˜๋ก€ ์ผ€์ด์Šค์˜ 5๋ฒˆ์งธ๊นŒ์ง€ ํ†ต๊ณผ๋ฅผ ํ•˜๋‹ˆ ํ†ต๊ณผ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๋‹ค๋ฅธ ๋ถ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐพ์•„๋ณด๋‹ˆ ์ด๋ถ„๊บผ๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด ์žˆ์—ˆ๋‹ค.

๋‚ด ์ฝ”๋“œ๋Š” for๋ฌธ์„ ๋งŽ์ด ์“ฐ๋Š”๋ฐ for๋ฌธ์„ ๋งŽ์ด ์“ฐ์ง€ ์•Š๋„๋ก ์ƒ๊ฐํ•˜๋Š” ํž˜์„ ์ข€ ๋” ๊ธธ๋Ÿฌ์•ผ๊ฒ ๋‹ค.

https://velog.io/@nacean/%EB%B0%B1%EC%A4%803190-%EB%B1%80-C-%ED%92%80%EC%9D%B4

 

๋ฐฑ์ค€[3190] ๋ฑ€ C++ ํ’€์ด

์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๊ตฌํ˜„ํ•  ์ค„ ์•ˆ๋‹คํ๋ฅผ ์‚ฌ์šฉํ•  ์ค„ ์•ˆ๋‹ค๋ฑ€์˜ ๋ชธํ†ต์˜ ์ฒ˜์Œ๊ณผ ๋์„ ์ €์žฅํ•ด์ฃผ๊ธฐ ์œ„ํ•ด queue๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐฐ์—ด์„ ์ฑ„ํฌํ•˜์—ฌ, D ํ˜น์€ L์ผ ๊ฒฝ์šฐ ๋ฐฉํ–ฅ ํšŒ์ „์„ ํ•œ๋‹คwhile๋ฌธ์„

velog.io

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.