백준 1652번: 누울 자리를 찾아라 (C++)

2023. 1. 18. 16:20알고리즘/구현

https://www.acmicpc.net/problem/1652

 

1652번: 누울 자리를 찾아라

첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다.

www.acmicpc.net

 

풀이

최대 시간복잡도가 100*100이어서 완전 탐색으로 진행했다.

우선,  ver, hor 변수를 선언해서 빈 공간일 때 카운트를 했다.

그리고 ' X ' 를 만나거나 끝 부분에 도착했을 때  ver, hor가 2보다 크다면 누울 공간이 나온다는 뜻이므로

ver_cnt 와 hor_cnt 에 1씩 더해주고 ver, hor를 0으로 초기화해주었다.

 

가로와 세로는 i 와 j를 바꿔 이중 for문으로 한번에 진행시켰다.

 

전체 코드

#include <iostream>

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int N;
	int condo[101][101] = { 0, };
	int hor_cnt = 0;
	int ver_cnt = 0;
	
	cin >> N;

	for (int i = 0; i < N; i++) {
		string s;
		cin >> s;
		for (int j = 0; j < N; j++) condo[i][j] = s[j];
	}

	for (int i = 0; i < N; i++) {
		int hor = 0;
		int ver = 0;
		for (int j = 0; j < N; j++) {
			if (condo[i][j] != 'X') hor++;
			if (condo[i][j] == 'X' || j == N - 1) {
				if (hor >= 2) hor_cnt++;
				hor = 0;
			}   
			
			if (condo[j][i] != 'X') ver++;
			if (condo[j][i] == 'X' || j == N - 1) {
				if (ver >= 2) ver_cnt++;
				ver = 0;
			}
		}
	}

	cout << hor_cnt << ' ' << ver_cnt;
}