https://www.acmicpc.net/problem/1236
1236번: 성 지키기
첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n, m, rowCnt, colCnt, maxRowCnt=0, maxColCnt=0;
char building[53][53];
int main(){
cin >> n >> m;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin >> building[i][j];
}
}
//행 갯수 세기(열고정)
for(int i=0; i<m; i++){
rowCnt=0;
for(int j=0; j<n; j++){
if(building[j][i] == 'X') break;
rowCnt++;
}
if(rowCnt == n) maxRowCnt++;
}
//열 갯수 세기(행고정)
for(int i=0; i<n; i++){
colCnt=0;
for(int j=0; j<m; j++){
if(building[i][j]=='X') break;
colCnt++;
}
if(colCnt == m) maxColCnt++;
}
if(maxRowCnt == maxColCnt) cout << maxRowCnt;
else{
cout << max(maxRowCnt, maxColCnt);
}
return 0;
}
* 경비원이 필요한 행 갯수 세기
- 열을 i, 행을 j로 놓는다.
- 열은 고정시킨채 행이 한칸씩 이동하며 X인지 확인한다.
- X가 발견되는 즉시 열을 옮긴다.
(만약 행 끝까지 X가 발견되지 않는다면, rowCnt의 갯수는 행의 갯수와 같을 것이다.)
- rowCnt가 행의 갯수와 같다면 maxRowCnt를 증가시켜, 경비원이 필요한 수를 추가한다.
//행 갯수 세기(열고정)
for(int i=0; i<m; i++){
rowCnt=0;
for(int j=0; j<n; j++){
if(building[j][i] == 'X') break;
rowCnt++;
}
if(rowCnt == n) maxRowCnt++;
}
* 경비원이 필요한 열 갯수 세기
- 행을 i, 열을 j로 놓는다.
- 행은 고정시킨채 열이 한칸씩 이동하며 X인지 확인한다.
- X가 발견되는 즉시 행을 옮긴다.
(만약 열 끝까지 X가 발견되지 않는다면, colCnt의 갯수는 열의 갯수와 같을 것이다.)
- colCnt가 열의 갯수와 같다면 maxColCnt를 증가시켜, 경비원이 필요한 수를 추가한다.
//열 갯수 세기(행고정)
for(int i=0; i<n; i++){
colCnt=0;
for(int j=0; j<m; j++){
if(building[i][j]=='X') break;
colCnt++;
}
if(colCnt == m) maxColCnt++;
}
-열의 추가해야하는 경비원의 수와 행의 추가해야하는 경비원의 수를 비교하여 더 큰 수를 출력하면 된다.
(같으면 아무거나 출력)
if(maxRowCnt == maxColCnt) cout << maxRowCnt;
else{
cout << max(maxRowCnt, maxColCnt);
}
'코테' 카테고리의 다른 글
백준 10808번 - 알파벳 개수 (0) | 2023.08.07 |
---|---|
백준 1252번-이진수 덧셈 (0) | 2023.08.07 |
백준 1233번 -주사위 (0) | 2023.08.06 |
백준 1225번- 이상한 곱셈 (0) | 2023.08.04 |
백준 1212번 - 8진수 2진수 (1) | 2023.08.04 |