반응형
단순 구현문제 / 코드가 길어지고 더러워지는 경향이 있었음
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#include <string>
#include <vector>
#include <sstream>
using namespace std;
/*
<문제>
로봇강아지가 산책함 - O가 지나다니는 길, X가 장애물
"E 5" 형태로 주어짐(동쪽으로 5칸)
공원을 벗어나거나, 장애물을 만나면 해당 명령 무시
가로 W, 세로 H일 때 좌측상단 (0, 0), 우측하단 (H-1, W-1)
모든 명령 수행 후 놓인 위치를 (세로좌표, 가로좌표) 순으로 배열애 담아 return
park길이 <=50
park[i]길이 <=50
*/
vector<int> solution(vector<string> park, vector<string> routes) {
vector<int> answer;
int x, y; //현재 좌표(세로, 가로)
for (int i = 0; i < park.size(); i++) {
bool flag = false;
for (int j = 0; j < park[i].size(); j++) {
if (park[i][j] == 'S') {
flag = true;
x = i; y = j; break;
}
if (flag)break;
}
}
//현재좌표 x, y(세로, 가로) 저장완료
for (int i = 0; i < routes.size(); i++) { //경로 리스트 순회
stringstream ss(routes[i]);
string way, tmp; int distance;
getline(ss, way, ' '); getline(ss, tmp, '\n'); distance = stoi(tmp);
//방향, 거리 저장 완료
int garo = park[0].size(), sero = park.size(); //가로세로 길이
if (way.compare("E") == 0) { //동
if ((y + distance) >= garo) continue; //벽 거르기
bool flag = true; //명령수행가능여부
for (int j = 1; j <= distance; j++) { //해당 방향 나아가며 장애물 확인
if (park[x][y + j] == 'X') {
flag = false;
break;
}
}
if (flag) { //이동가능할 때
y += distance;
}
}
else if (way.compare("W") == 0) { //서
if ((y - distance) < 0) continue; //벽 거르기
bool flag = true; //명령수행가능여부
for (int j = 1; j <= distance; j++) { //해당 방향 나아가며 장애물 확인
if (park[x][y - j] == 'X') {
flag = false;
break;
}
}
if (flag) { //이동가능할 때
y -= distance;
}
}
else if (way.compare("S") == 0) { //남
if ((x + distance) >= sero) continue; //벽 거르기
bool flag = true; //명령수행가능여부
for (int j = 1; j <= distance; j++) { //해당 방향 나아가며 장애물 확인
if (park[x + j][y] == 'X') {
flag = false;
break;
}
}
if (flag) { //이동가능할 때
x += distance;
}
}
else if (way.compare("N") == 0) { //북
if ((x - distance) < 0) continue; //벽 거르기
bool flag = true; //명령수행가능여부
for (int j = 1; j <= distance; j++) { //해당 방향 나아가며 장애물 확인
if (park[x - j][y] == 'X') {
flag = false;
break;
}
}
if (flag) { //이동가능할 때
x -= distance;
}
}
}
answer.push_back(x); answer.push_back(y);
return answer;
}
|
cs |
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
[Programmers] 프로그래머스 Lv.1 바탕화면 정리 문제풀이(C++) (1) | 2023.04.22 |
---|---|
[Programmers] 프로그래머스 Lv.2 과제 진행하기 문제풀이(C++) (1) | 2023.04.22 |
[Programmers] 프로그래머스 Lv.3 아방가르드 타일링 문제풀이(C++) (0) | 2023.04.20 |
[Baekjoon] 백준 민식우선탐색(1376번) 문제풀이(C++) (0) | 2023.03.20 |
[codeforces] 코드포스 Typical Interview problem 문제풀이(C++) (0) | 2023.03.01 |