본문 바로가기

알고리즘/백준

[JAVA]백준_1347_미로만들기

문제 : https://www.acmicpc.net/problem/1347

 

1347번: 미로 만들기

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

www.acmicpc.net

문제 유형 : 시뮬레이션, 구현

 

풀이 방식 : 노트에 적은 내용의 길이가 0보다 크고 50보다 작으니 현재 r과 c를 50, 50으로 두고 시뮬레이션.

 

소스코드

package BOJ;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class BOJ_1347_미로만들기_Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		char[] note = br.readLine().toCharArray();
		int dir = 0; // 0남 1서 2북 3동
		int max_r=50, max_c=50;
		int min_r=50, min_c=50;
		int now_r = 50, now_c = 50;

		List<int[]> list = new ArrayList<int[]>();
		list.add(new int[] {50, 50});
		for (int i = 0; i < N; i++) {
			if(note[i]=='R'||note[i]=='L') {
				if(note[i]=='R') { //오른쪽 회전
					if(dir==3) {
						dir=0;
					}else {
						dir++;
					}
					
				}else { // 왼쪽 회전
					if(dir==0) {
						dir=3;
					}else {
						dir--;
					}
				}
			}else {
				if(note[i]=='F') { //앞으로
					if(dir==0) {//남
						now_r++;
						if(max_r<now_r) max_r=now_r;
					}else if(dir==1) {//서
						now_c--;
						if(min_c>now_c) min_c=now_c;
					}else if(dir==2) {//북
						now_r--;
						if(min_r>now_r) min_r=now_r;
					}else {//동
						now_c++;
						if(max_c<now_c) max_c=now_c;
					}
				}else { // 뒤로
					if(dir==0) {//남 이니까 북
						now_r--;
						if(min_r>now_r) min_r=now_r;
					}else if(dir==1) {//서니까 동
						now_c++;
						if(max_c<now_c) max_c=now_c;
					}else if(dir==2) {//북 이니까 남
						now_r++;
						if(max_r<now_r) max_r=now_r;
					}else {//동 이니까 서
						now_c--;
						if(min_c>now_c) min_c=now_c;
					}
				}
				list.add(new int[] {now_r, now_c});
			}
		}
		
		char[][] board = new char[101][101];
		for (int r = min_r; r <= max_r; r++) {
			for (int c = min_c; c <= max_c; c++) {
				board[r][c] = '#';
			}
		}
		
		for (int j = 0; j < list.size(); j++) {
			int[] cur = list.get(j);
			board[cur[0]][cur[1]] = '.';
		}
		
		for (int r = min_r; r <= max_r; r++) {
			for (int c = min_c; c <= max_c; c++) {
				System.out.print(board[r][c]);
			}System.out.println();
		}
	}

}

 

'알고리즘 > 백준' 카테고리의 다른 글

[JAVA]백준_2503_숫자야구  (0) 2020.08.06
[JAVA]백준_3187_양치기꿍  (0) 2020.08.05
[JAVA]백준_11967_불켜기  (0) 2020.08.04
[JAVA]백준_13913번_숨바꼭질4  (0) 2020.08.03
[JAVA]백준_1120번_문자열  (0) 2020.08.03