danbibibi
article thumbnail

문제

문제 바로가기 > BOJ 1347번: 미로 만들기

 

1347번: 미로 만들기

홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍

www.acmicpc.net

 

풀이

미로의 어느 지점에서 이동을 시작할지 모르기 때문에 maze 크기를 101로 잡아주었다.

시뮬레이션을 통해 방문한 곳은 true로 변경해주고, 이후 boundary를 찾아 미로를 출력해준다!

#include<iostream>
#define MAX 101
using namespace std;

struct HJ {int y=50, x=50, d=2;} hj; // 홍준

int moveCnt;
string content;
bool maze[MAX][MAX];
int dy[] = {-1, 0, 1, 0};
int dx[] = {0, 1, 0, -1};

void solution(){
    cin >> moveCnt >> content;
    maze[hj.y][hj.x] = true;

    for(char c : content){
        if(c == 'L'){
            if(--hj.d < 0) hj.d = 3;
        }
        else if(c == 'R'){
            if(++hj.d > 3) hj.d = 0;
        }
        else { // c == 'F'
            hj.y += dy[hj.d];
            hj.x += dx[hj.d];
            maze[hj.y][hj.x] = true;
        }
    }
}

void output(){

    // find boundary
    int sy, sx, ey, ex;
    sy = sx = MAX;
    ey = ex = 0;

    for (int y = 0; y < MAX; y++){
        for (int x = 0; x < MAX; x++){
            if(maze[y][x]){
                if(y < sy) sy = y;
                if(x < sx) sx = x;
                if(y > ey) ey = y;
                if(x > ex) ex = x;
            }
        }
    }

    // print maze
    for (int y = sy; y <= ey; y++){
        for (int x = sx; x <= ex; x++){
            if(maze[y][x]) cout << ".";
            else cout << "#";
        } cout << "\n";
    }
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    solution();
    output();
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 2230번: 수 고르기  (0) 2023.09.03
BOJ 16928번: 뱀과 사다리 게임  (0) 2023.08.29
BOJ 9207번: 페그 솔리테어  (1) 2023.05.16
BOJ 11438번: LCA 2  (0) 2023.04.20
BOJ 1799번: 비숍  (0) 2023.04.06
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로