알고리즘/백준(BOJ)

[백준/BOJ/알고리즘/파이썬(python)/C++/String]#1652_누울 자리를 찾아라

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

 

1652번: 누울 자리를 찾아라

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

www.acmicpc.net

문자열을 다루는 문제다.

파이썬에서는 운좋게 넘어간건지 문제가 없었는데, 

C++에서는 처음에 지나간 자리인지 아닌지 체크해야하는 bool을 넣어야 오류가 안 났다. 

 

 

파이썬 코드

n = int(input())
cnt_w = 0
cnt_h = 0
room = []
bed = [0,0]
for i in range(n): #get input
    room.append(list(map(str,input())))
for i in range(n): #cnt bed
    cnt_h=0
    cnt_w = 0
    for j in range(n):
        if room[j][i] == ".":
            cnt_h += 1
        elif room[j][i] == "X":
            cnt_h = 0
        if cnt_h == 2:
            bed[1] += 1

        if room[i][j] == ".":
            cnt_w += 1
        elif room[i][j] == "X":
            cnt_w = 0
        if cnt_w ==2:
            bed[0] += 1

print(bed[0],bed[1])

C++코드

#include <iostream>
using namespace std;

int main(){
	int n;
	cin>>n;
	char room[n][n];

	int w=0,h=0;
	for(int i=0;i<n;i++){
			cin >> room[i];

	}
	
	int bed[2]={0,};


	for(int i=0;i<n;i++){
		int cnt_h = 0;	
		int first_h = 0;
		int cnt_w = 0;	
		int first_w = 0;
		for(int j=0;j<n;j++){
			if(room[j][i]=='.')
				cnt_h ++;
			if(cnt_h==2){
				if(!first_h){
					h++;
					bed[1]++;
				}
				first_h = 1;
				cnt_h = 0;
				
			}			
			else if(room[j][i]=='X'){
				cnt_h = 0;
				first_h = 0;
			}



			if(room[i][j]=='.')
				cnt_w ++;
			if(cnt_w==2){
				if(!first_w){
					w++;
					bed[0]++;
				}
				first_w = 1;
				cnt_w = 0;
					
			}
			else if(room[i][j]=='X'){
				cnt_w = 0;
				first_w = 0;
			}
		
	
		}
	}
	
	cout<<bed[0]<<' '<<bed[1];

	
}