https://www.acmicpc.net/problem/1236
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin')
.toString().trim().split('\n')
const [w, l] = input[0].split(' ')
const dot = input.slice(1)
const solution = (w, l, dot) => {
let [wCount, lCount] = [0, 0]
dot.forEach(el => {
if(!el.includes('X')) wCount++
})
for(let j = 0; j<l; j++){
for(let i = 0; i<w; i++){
if(dot[i].charAt(j) === 'X'){
break;
}else if(i === w-1){
lCount++
}
}
}
return Math.max(wCount, lCount)
}
console.log(solution(w, l, dot))
입력값이 다음과 같은 경우
5 8
......X.
........
X..X.XX.
........
........
5개의 행 중 X가 필요한 행은 3개,
8개의 열 중 X가 필요한 열은 4개이므로
이 두 값을 비교하여 큰 값을 반환하도록 한다.
행에서 X를 찾을 땐 includes
로 간단히 찾아 처리할 수 있었지만
열에서 X를 찾을 땐 다소 고민이 많았다.
X가 있으면 순회를 중단하고 다음 열로 넘어가야 하고, X가 마지막까지 없으면 lCount를 증가시켜야 하는데 코드가 뭔가 조잡스러워 보였다.
가로 세로를 서로 바꾸고 열도 includes
로 순회하는게 더 아름답지 않을까 고민했지만 그게 품이 더 들 거 같아 이중for문으로 잘 해결되었다.