[백준] 1236 성 지키기 - Node.js

송철진·2023년 4월 4일
0

백준-Node.js

목록 보기
54/69

문제

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문으로 잘 해결되었다.

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글