시간 제한 |
메모리 제한 |
제출 |
정답 |
맞힌 사람 |
정답 비율 |
2 초 |
128 MB |
11195 |
4312 |
3631 |
40.520% |
문제
영식이는 직사각형 모양의 성을 가지고 있다. 성의 1층은 몇 명의 경비원에 의해서 보호되고 있다. 영식이는 모든 행과 모든 열에 한 명 이상의 경비원이 있으면 좋겠다고 생각했다.
성의 크기와 경비원이 어디있는지 주어졌을 때, 몇 명의 경비원을 최소로 추가해야 영식이를 만족시키는지 구하는 프로그램을 작성하시오.
출력
첫째 줄에 추가해야 하는 경비원의 최솟값을 출력한다.
예제 입력 1
4 4
....
....
....
....
예제 입력 2
3 5
XX...
.XX..
...XX
예제 입력 3
5 8
....XXXX
........
XX.X.XX.
........
........
나의 풀이
const [nm, ...arr] = require('fs').readFileSync('./input.txt').toString().trim().split('\n')
// n 세로 m 가로
const [n, m] = nm.split(' ').map(Number)
function solution(n, m, arr) {
let row = 0, col = 0, cnt = 0;
// row check
for (let i = 0; i < n; i++) {
if (!arr[i].includes('X')) {
row++
}
}
// column check
for (let j = 0; j < m; j++) {
cnt = 0
for (let k = 0; k < n; k++) {
if (arr[k][j] === 'X') {
cnt++
}
if (k === n - 1 && cnt === 0) {
col++
}
}
}
// 둘 중 큰 수 리턴
return Math.max(row, col)
}
console.log(solution(n, m, arr))
간단하게 row에 x가 있으면 row에 체크
column에 x가 있으면 column에 체크해서
둘 중에 더 큰 수를 리턴하면 된다고 생각했다!
구현하기 위해서 row는 그냥 includes로 찾았고
세로줄을 찾으려면 j는 m크기 만큼 k는 n만큼 해서
arr[k][j] 에서 k만 계속 ++되게!
한 열에서 하나만 있으면 되니까
x가 있으면 cnt를 ++ 해주고
for문이 한 열을 다 돌고, cnt가 0이면 col에 체크해줬다.
해서
최종으로 row와 col 중에 더 큰 수를 리턴한다.