[BOJ] 백준 #1236. 성 지키기 (C++)
🎨 문제

문제 링크: https://www.acmicpc.net/problem/1236
- 알고리즘 분류: 구현
- 난이도: Bronze Ⅰ
💬 풀이
- 입력받기 ― 2차원 배열 동적할당
- ‘X’가 있는 행과 열을 마킹해줄
bool row[N],bool col[M]배열
― ‘X’를 입력받으면, 그 행과 열을 true처리 - 구하고자 하는 답은
ans_r + ans_c - min(ans_r, ans_c). 즉max(ans_r, ans_c)
― 경비원이 없는 false행과 false열 중 겹치게 한 곳만 두면 되니까
👩💻 코드
C++
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int main() {
//freopen("input.txt", "rt", stdin);
int N, M;
cin >> N >> M;
char** input = new char*[N];
for (int i = 0; i < N; i++) {
input[i] = new char[M];
}
bool* row = new bool[N] {false};
bool* col = new bool[M] {false};
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> input[i][j];
if (input[i][j] == 'X') {
row[i] = true;
col[j] = true;
}
}
}
int ans_r = 0, ans_c = 0;
for (int i = 0; i < N; i++) {
if (!row[i]) { ++ans_r; }
}
for (int i = 0; i < M; i++) {
if (!col[i]) { ++ans_c; }
}
cout << max(ans_r, ans_c);
return 0;
}
처음엔 정답률 보고 쫄았는데, 오히려 한번에 맞춤.
정답률 높은 문제들은 오히려 오래 걸린 적이 꽤 있다.
정답률 보고 쫄지 말쟈. 그냥 ㄱㄱ
댓글남기기