0. 출처
백준 1347번 문제입니다.
1. 문제
홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍준이는 미로에서 모든 행과 열의 이동할 수 있는 칸을 걸어다녔다. 그러면서 자신의 움직임을 모두 노트에 쓰기로 했다. 홍준이는 미로의 지도를 자기 노트만을 이용해서 그리려고 한다. 입력으로 홍준이가 적은 내용을 나타내는 문자열이 주어진다. 각 문자 하나는 한 번의 움직임을 말한다. ‘F’는 앞으로 한 칸 움직인 것이고, ‘L'과 ’R'은 방향을 왼쪽 또는 오른쪽으로 전환한 것이다. 즉, 90도를 회전하면서, 위치는 그대로인 것이다.
(1) 입력
첫째 줄에 홍준이가 적은 내용의 길이가 주어진다. 길이는 0보다 크고, 50보다 작다. 둘째 줄에 홍준이가 적은 내용이 내용이 주어진다.
(2) 출력
첫째 줄에 미로 지도를 출력한다. ‘.’은 이동할 수 있는 칸이고, ‘#’는 벽이다.
2. 문제 풀이
(1) 문제 풀이 방법
홍준이가 이동한 미로의 경로를 쭉 따라간 뒤에 이를 기반으로 미로 전체를 그리는 문제입니다.
홍준이가 적은 내용대로 이동을 한 뒤에 map[][]을 그대로 출력해주면 됩니다!
홍준이가 적은 내용의 길이는 최대 49이므로, 2차원 배열의 크기를 99로 지정한 후 (49, 49)를 출발지로 설정하고 이동을 시작했습니다.
'L'이 나오면 반시계 방향으로 돌아주고, 'R'이 나오면 시계 방향으로 돌아주면 됩니다.
이동을 할 때마다(F가 나올 때마다) 행과 열의 최댓값, 최솟값을 확인해주었고, 최솟값부터 최댓값까지 출력해 주도록 코드를 작성했습니다!
(2) 코드 (Java)
import java.io.*;
public class Main {
static int[] dr = {-1, 0, 1, 0}; // 상우하좌 -> 시계 방향
static int[] dc = {0, 1, 0, -1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
char[] arr = br.readLine().toCharArray();
int[][] map = new int[99][99];
int direction = 2;
int nowR = 49;
int nowC = 49;
int max_r = nowR;
int min_r = nowR;
int max_c = nowC;
int min_c = nowC;
map[49][49] = 1; // 출발 지점 체크해주기
for(char c: arr) {
if(c == 'F') { // 현재 방향에서 앞으로 전진
nowR += dr[direction];
nowC += dc[direction];
max_r = Math.max(max_r, nowR);
max_c = Math.max(max_c, nowC);
min_r = Math.min(min_r, nowR);
min_c = Math.min(min_c, nowC);
map[nowR][nowC] = 1;
} else if(c == 'L') { // 시계 반대 방향으로 회전
direction = (direction+3)%4;
} else if(c == 'R') { // 시계 방향으로 회전
direction = (direction+1)%4;
}
}
for(int i=min_r; i<=max_r; i++) {
for(int j=min_c; j<=max_c; j++) {
if(map[i][j] == 0) {
bw.append("#");
} else {
bw.append(".");
}
}
bw.append("\n");
}
bw.flush();
br.close();
bw.close();
}
}
(3) 결과
'Algorithm & Data Structure > 코딩 테스트 문제풀이' 카테고리의 다른 글
[백준] 1759번 암호 만들기 (Java) (0) | 2024.04.22 |
---|---|
[백준] 2529번 부등호 (Java) (0) | 2024.04.21 |
[백준] 1916번 최소비용 구하기 (Java) (2) | 2024.04.18 |
[백준] 2157번 여행 (Java) (0) | 2024.04.17 |
[백준] 2302번 극장 좌석 (Java) (0) | 2024.04.16 |
댓글