Skip to content

Commit e346e35

Browse files
committed
[Silver I] Title: 로봇, Time: 116 ms, Memory: 14816 KB -BaekjoonHub
1 parent a683f7d commit e346e35

2 files changed

Lines changed: 165 additions & 0 deletions

File tree

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# [Silver I] 로봇 - 13901
2+
3+
[문제 링크](https://www.acmicpc.net/problem/13901)
4+
5+
### 성능 요약
6+
7+
메모리: 14816 KB, 시간: 116 ms
8+
9+
### 분류
10+
11+
구현, 시뮬레이션
12+
13+
### 제출 일자
14+
15+
2025년 3월 27일 12:40:00
16+
17+
### 문제 설명
18+
19+
<p>해빈이는 로봇을 좋아한다. 로봇을 가지고 놀던 해빈이는 로봇에게 계속해서 명령을 내려 움직이는 대신 이동할 방향을 미리 지정하여 로봇이 알아서 움직이도록 하였다. 이 로봇은 다음과 같은 규칙을 가지고 움직인다.</p>
20+
21+
<ul>
22+
<li>로봇은 사용자가 지정한 방향을 일직선으로 움직인다.</li>
23+
<li>이동 중 벽이나 방문한 지역, 장애물을 만날 경우 로봇은 사용자가 지정한 다음 방향으로 움직인다.</li>
24+
<li>사용자가 지정한 다음 방향이 없다면 맨 처음 방향으로 돌아가서 위의 과정을 반복한다.</li>
25+
<li>로봇이 움직일 수 없을 경우 동작을 멈춘다. </li>
26+
</ul>
27+
28+
<table class="table table-bordered">
29+
<tbody>
30+
<tr>
31+
<td style="height:135px; width:108px">
32+
<p>* * *</p>
33+
34+
<p>x 0 *</p>
35+
36+
<p>* * *</p>
37+
38+
<p><초기 상태></p>
39+
</td>
40+
<td style="height:135px; width:108px">
41+
<p>* 1 *</p>
42+
43+
<p>x 0 *</p>
44+
45+
<p>* * *</p>
46+
47+
<p><1번 째 이동></p>
48+
</td>
49+
<td style="height:135px; width:108px">
50+
<p>2 1 *</p>
51+
52+
<p>x 0 *</p>
53+
54+
<p>* * *</p>
55+
56+
<p><2번 째 이동></p>
57+
</td>
58+
<td rowspan="2" style="height:135px; width:325px">
59+
<p>방 크기가 3* 3이고</p>
60+
61+
<p>장애물이 (1, 0)에 있으며</p>
62+
63+
<p>시작 위치는 (1,1)</p>
64+
65+
<p>해빈이가 지정한 방향이 (상, 하, 좌, 우) 일 때,</p>
66+
67+
<p>로봇의 마지막 위치는 (0, 0)이다.</p>
68+
</td>
69+
</tr>
70+
<tr>
71+
<td colspan="3" style="height:60px; width:325px">
72+
<p>2 번째 이동이 끝난 후, 로봇은 움직일 수 없으므로 동작을 멈춘다.</p>
73+
74+
<p>로봇은 (1, 1) → (0, 1) → (0, 0)로 이동하였다.</p>
75+
</td>
76+
</tr>
77+
</tbody>
78+
</table>
79+
80+
<p>입력으로 방의 크기와 장애물의 개수, 각 장애물들의 위치, 로봇의 시작 위치, 이동 방향의 순서가 주어졌을 때 로봇이 멈추는 위치를 출력하시오. 위치 (0, 0)은 왼쪽 위를 가리키며 방의 크기가 R * C일 때 오른쪽 아래 위치는 (R - 1, C - 1)이 된다. (R은 세로의 크기를 C은 가로의 크기를 말한다.)</p>
81+
82+
### 입력
83+
84+
<p>첫 번째 줄에는 방의 크기 R, C(3 <strong>≤</strong> R, C <strong>≤</strong> 1,000)가 입력된다. 두 번째 줄에는 장애물의 개수 k(0 <strong>≤</strong> k <strong>≤</strong> 1,000)가 입력된다. 다음 k개의 줄에는 각 장애물 위치 br(0 <strong>≤ </strong>br <strong>≤</strong> R – 1), bc(0 <strong>≤</strong> bc <strong>≤</strong> C - 1)가 주어진다. 그 다음 순서대로 로봇의 시작 위치 sr(0 <strong>≤</strong> sr <strong>≤</strong> R – 1), sc(0 <strong>≤</strong> sc <strong>≤</strong> C - 1)와 이동 방향의 순서(총 4개가 입력되는데 1은 위 방향, 2은 아래 방향, 3은 왼쪽 방향, 4는 오른쪽 방향을 나타낸다)가 한 줄씩 입력된다. 로봇의 시작위치에 장애물이 있는 경우는 없다.</p>
85+
86+
### 출력
87+
88+
<p>로봇의 마지막 위치 r, c를 출력한다.</p>
89+
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
static int r, c, k;
6+
static int[] d, robot;
7+
static boolean[][] trap;
8+
static int[] dx = {0, -1, 1, 0, 0};
9+
static int[] dy = {0, 0, 0, -1, 1};
10+
static StringTokenizer st;
11+
static StringBuilder sb = new StringBuilder();
12+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
14+
public static void main(String[] args) throws Exception{
15+
preSetting();
16+
move();
17+
sb.append(robot[0]).append(" ").append(robot[1]);
18+
bw.append(sb);
19+
bw.close();
20+
}
21+
22+
static void move(){
23+
24+
int nx, ny, idx, combo;
25+
26+
idx = 0;
27+
combo = 0;
28+
29+
while(combo < 4){
30+
nx = robot[0] + dx[d[idx]];
31+
ny = robot[1] + dy[d[idx]];
32+
33+
if(nx < 0 || ny < 0 || r <= nx || c <= ny || trap[nx][ny]) {
34+
idx++;
35+
if(idx == 4) idx = 0;
36+
combo++;
37+
continue;
38+
}
39+
trap[nx][ny] = true;
40+
robot[0] = nx;
41+
robot[1] = ny;
42+
combo = 0;
43+
}
44+
}
45+
46+
static void preSetting() throws Exception{
47+
st = new StringTokenizer(br.readLine());
48+
49+
r = Integer.parseInt(st.nextToken());
50+
c = Integer.parseInt(st.nextToken());
51+
k = Integer.parseInt(br.readLine());
52+
53+
trap = new boolean[r][c];
54+
robot = new int[2];
55+
d = new int[4];
56+
57+
int x, y;
58+
for(int i = 0; i < k; i++){
59+
st = new StringTokenizer(br.readLine());
60+
61+
x = Integer.parseInt(st.nextToken());
62+
y = Integer.parseInt(st.nextToken());
63+
64+
trap[x][y] = true;
65+
}
66+
67+
st = new StringTokenizer(br.readLine());
68+
69+
robot[0] = Integer.parseInt(st.nextToken());
70+
robot[1] = Integer.parseInt(st.nextToken());
71+
trap[robot[0]][robot[1]] = true;
72+
73+
st = new StringTokenizer(br.readLine());
74+
for(int i = 0; i < 4; i++) d[i] = Integer.parseInt(st.nextToken());
75+
}
76+
}

0 commit comments

Comments
 (0)