매일 조금씩

백준 2897번: 몬스터 트럭 본문

알고리즘

백준 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
반응형

'알고리즘' 카테고리의 다른 글

백준 5598번: 카이사르 암호  (0) 2020.02.12
백준 11656번: 접미사 배열  (0) 2020.02.11
백준 10769번: 행복한지 슬픈지  (0) 2020.02.08
백준 1919번: 애너그램 만들기  (0) 2020.01.19
백준 2857번: FBI  (0) 2020.01.18