알고리즘
백준 2897번: 몬스터 트럭
mezo
2020. 2. 9. 03:21
728x90
반응형
백준2823번 과 비슷하게 풀어내었다.
https://gimmesome.tistory.com/19?category=1065043
[C++] 백준 2823번: 유턴 싫어
문제의 입출력과 힌트를 보면 막다른 길이 되지않으려면 최소한 현위치에서 동서남북의 방향중 두군데 이상은 뚫여 있어야 한다는 것을 알 수 있다. 완전히 나의 힘으로 푼것은 아니고 다른 코딩을 참고하여 문제..
gimmesome.tistory.com
v[i][j]의 i와 j가 y축과 x축위로 움직이는 것과 같다고 보고
y,x를 struct에서 정의하여 nextY,nextX를 구하는 데에 사용하도록 하였다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int R, C;
vector<string> v;
int park[5];
typedef struct {
int y, x;
}Dir;
Dir parkDir[3]={ {1,0},{1,1},{0,1} };
void Parking() {
for (int i = 0; i < R-1; i++) {
for (int j = 0; j < C-1; j++) {
bool building = false;
int openPark = 0;
if (v[i][j] == '#')
building = true;
else{
if (v[i][j] == 'X') openPark++;
for (int k = 0; k < 3; k++) {
int nextY = i + parkDir[k].y;
int nextX = j + parkDir[k].x;
if (v[nextY][nextX] == '#') {
building = true;
break;
}
if (v[nextY][nextX] == 'X') openPark++;
}
}
if (!building) {
if (!openPark) park[0]++;
else if (openPark == 1) park[1]++;
else if (openPark == 2) park[2]++;
else if (openPark == 3) park[3]++;
else park[4]++;
}
}
}
}
int main(void) {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> R >> C;
v.resize(R);
for (int i = 0; i < R; i++) {
cin >> v[i];
}
Parking();
for (int i = 0; i < 5; i++) {
cout << park[i] << endl;
}
return 0;
}
728x90
반응형