매일 조금씩

[C++] 백준 2799번: 블라인드 본문

알고리즘

[C++] 백준 2799번: 블라인드

mezo 2019. 9. 9. 00:46
728x90
반응형

 

 

string, vector, template을 공부하면서 풀어본 문제 중 도움이 많이 된 문제

 

vector와 template에 대한 개념이 안잡혀 있는 상태에서 푸느라 많은 어려움을 겪다가 

 

구글링 후 코드를 참고 하였다.

 

 

 

 

 

1. string 타입의 vector를 5*M +1개 입력 받음.

2. 행에 창문의 유,무 확인을 위해 bool window를 활용.

3. 창문일 때 블라인드 상태를 체크하기 위해 k를 사용.

4. 해당 창문 밖(다음 창문 직전)으로 가기위해 j+=4를 해야하나, for 문의 j++를 고려하여 j+=3을 함.

5. 창문이 있는 행을 체크후, 행 밖(다음 창문 바로 윗줄)으로 가기 위해 i+=4를 해야하나, 4번의 이유로 i+=3을 함.

6. ' * '일 땐, 다음 몇행이 ' * '인지 체크 후,  arr[1~4] 중 하나를 arr[1~4]++; 하고, ' . '일 땐 arr[0]++; 를 함.

 

 

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int arr[5];
vector<string> v;


int main(void) {
	int M, N;
	cin >> M >> N;

	v.resize(5 * M + 1);  
	
	for (int i = 0; i < 5 * M + 1; i++) 
		cin >> v[i];
	
	
	
	for (int i = 0; i < 5 * M + 1;i++) {	// 행
		bool window = false;
		for (int j = 0; j < v[i].size();j++) {	//열
			
			if (v[i][j] == '.') {
				window = true;
				arr[0]++;
				j += 3;
			}
			else if (v[i][j] == '*') {
				window = true;
				int k = 0;
				while (1) {		
					k++;
					if (v[i + k][j] != '*')
						break;
				}
				arr[k]++;
				
				j += 3;
			}
		}
		if (window) {
			i += 3;
		}
	}
	for (int i = 0; i < 5; i++){
		cout << arr[i]<<" ";
	}
	cout << endl;

	return 0;
}

 

 

많이 배웠다.

728x90
반응형

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

[C++] 백준 10809번: 알파벳 찾기  (0) 2019.09.12
[C++] 백준 11383번: 뚊  (0) 2019.09.10
[C++] 백준 2839번: 설탕배달  (0) 2019.09.06
[C++] 백준 10822번 : 더하기  (0) 2019.09.04
[C++] 백준 2447번: 별찍기 - 10  (0) 2019.09.03