코테/백준

[백준/JAVA] 1347번: 미로 만들기

imname1am 2023. 8. 3. 15:57
반응형

🔺 문제

 

1347번: 미로 만들기

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

www.acmicpc.net

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.util.*;
import java.io.*;
 
public class Main{
    static int[] dx = {010-1};   // 남동북서 (0: 남, 1: 동, 2: 북, 3: 서)
    static int[] dy = {-1010};   // 남동북서
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
 
        int N = Integer.parseInt(br.readLine());
        char[] ch = br.readLine().toCharArray();
        
        char[][] map = new char[101][101];  // 배열 크기 100으로 두기
        for(int i = 0 ; i < 101 ; i++) {
            for(int j = 0 ; j < 101 ; j++) {
                map[i][j] = '#';
            }
        }
        
        int startX, startY, minX, minY, maxX, maxY;
        startX = startY = minX = minY = maxX = maxY = 50;
        map[startY][startX] = '.';  // 중심점 기준 시작 (중심점 r : 50 / c : 50)
        
        int dir = 2;
        
        // map 채우기
        for(int i = 0 ; i < ch.length ; i++) {
            if(ch[i] == 'F') {  // 전진
                startX += dx[dir];
                startY += dy[dir];
                map[startY][startX] = '.';
                
                maxX = Math.max(maxX, startX);
                maxY = Math.max(maxY, startY);
 
                minX = Math.min(minX, startX);
                minY = Math.min(minY, startY);
            }
            else if(ch[i] == 'L') { // 왼쪽 회전
                if(dir == 0)    dir = 3;     // 남쪽이면, 서쪽으로 회전
                else            dir--;
            }
            else if(ch[i] == 'R') { // 오른쪽 회전
                if(dir == 3)    dir = 0;    // 서쪽이면, 남쪽으로 회전
                else            dir++;
            }
        }
 
 
        // 출력하기
        for(int i = minY ; i <= maxY ; i++) {
            for(int j = minX ; j <= maxX ; j++) {
                sb.append(map[i][j]);
            }
            sb.append("\n");
        }
        
        System.out.println(sb);
    }
}
cs
✅ 해결 아이디어
✔ 구현 & 시뮬레이션
- 현재 위치를 (50,50)으로 두고 시뮬레이션

왼쪽이랑 오른쪽으로 회전 방향 헷갈려서,,,ㅎ

 


🔺 다른 풀이들

- 다들 비슷하시다...

 


💬 느낀 점

왼쪽이랑 오른쪽 방향 회전을 어떻게 하지...?하다가

시간이 흘러버렸다,,,

 

근본 구현을 잘하자..!!😳😳

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

#백준_1347 미로 만들기 - Java 자바

# 유형 : 시뮬레이션, 구현 # 난이도 : 실버 4 # 문제를 처음에 보고 뭐지..했는데 배열의 크기를 최대 100으로 잡고 다 벽으로 채워놓은 다음 중심점을 기준으로 시작하여 F가 나올때마다 전진하고

ukyonge.tistory.com

 

반응형