일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Baekjoon
- 프로그래머스
- 2019 카카오 공채
- 비트마스크
- gradle
- CS 스터디
- set
- 2019 KAKAO BLIND RECRUITMENT
- 부스트코스
- 알고리즘
- 2018 KAKAO BLIND RECRUITMENT 1차
- 자바
- 2020 KAKAO BLIND RECRUITMENT
- c++
- 카카오
- 카카오 공채
- 2018 카카오 공채
- 백준
- 2018 KAKAO BLIND RECRUITMENT
- map
- 삼성 SW 기출문제
- bfs
- dfs
- 2020 카카오 공채
- Java
- 삼성 SW 역량테스트
- 2018 카카오
- gcp
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- 젠킨스
Archives
- Today
- Total
아무코딩
[백준 14503] 로봇청소기 본문
문제풀이
문제에 명시되어있는 로봇청소기 작동 로직을 그대로 따라 하면 된다. (시뮬레이션 문제)
후진 시 바라보는 방향을 안 바꿔줘야 되는데 실수로 바꿔버리는 바람에 오류 잡느라 다 찍어보며 시간이 걸렸다.
소스코드
더보기
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#include <stdio.h>
#include <stdio.h>
int N, M;
typedef struct Robot {
int r, c, d;
Robot() {}
Robot(int rr, int cc, int dd) { r = rr; c = cc; d = dd; }
}Robot;
int Map[51][51];
int dir_row[4] = {-1,0,1,0};
int dir_col[4] = {0,1,0,-1};
int cnt = 0;
bool isRange(int r, int c) {
return r >= 0 && c >= 0 && r < N&&c < M;
}
void printMap(Robot robot) {
printf("\ncnt : %d\n", cnt);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (i == robot.r&&j == robot.c)
printf("R ");
else
printf("%d ", Map[i][j]);
}
printf("\n");
}
}
void cleanMap(Robot robot) {
//현재위치 청소
if (Map[robot.r][robot.c] == 0) {
cnt++;
Map[robot.r][robot.c] = 2;
}
//printMap(robot);
for (int i = 0; i < 4; i++) {
int cur_dir = robot.d;
int left_dir = (robot.d - 1) < 0 ? 3 : robot.d - 1;
int next_row = robot.r + dir_row[left_dir];
int next_col = robot.c + dir_col[left_dir];
if (isRange(next_row, next_col) && Map[next_row][next_col] == 0) {
cleanMap(Robot(next_row, next_col, left_dir));
return;
}
robot.d = (robot.d + 3) % 4;
}
//한칸 후진 해야됨.
int back_dir = (robot.d + 2) % 4;
int next_row = robot.r + dir_row[back_dir];
int next_col = robot.c + dir_col[back_dir];
if (isRange(next_row, next_col) && Map[next_row][next_col] !=1) {
cleanMap(Robot(next_row, next_col,robot.d));
return;
}
//다안되는 경우 일로통과 그리고 리턴됨
return;
}
int main() {
Robot robot;
scanf("%d %d", &N, &M);
scanf("%d %d %d", &robot.r, &robot.c, &robot.d);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%d", &Map[i][j]);
}
}
cleanMap(robot);
printf("%d\n", cnt);
}
|
문제 링크 : https://www.acmicpc.net/problem/14503
'알고리즘 > 백준' 카테고리의 다른 글
[백준 15685] 드래곤 커브 (0) | 2020.04.15 |
---|---|
[백준 5214] 환승 (0) | 2020.04.15 |
[백준 16638] 괄호 추가하기 2 (1) | 2020.03.31 |
[백준 12094] 2048(hard) (0) | 2020.03.29 |
[백준 15683] 감시 (0) | 2020.03.27 |
Comments