BOJ-3085

  • 로직은 알겠으나 너무 구현에 시간이 많이 들 것 같아 중간에 패스
const fs = require("fs")
const [num, ...arr] = fs.readFileSync("./test").toString().trim().split("\n")

let maxContinuous = 0

const board = arr.map(v => v.split(""))

// X, Y축 최대 연속 값 산출
for (let i = 0; i < num; i++) {
  const continuousX = new Set()
  const continuousY = new Set()

  for (let j = 0; i < num; j++) {
    continuousX.add(board[i][j])
    continuousY.add(board[i][j])
  }

  // 4개가 연속해도 set에는 1개가 들어가 있으니 모든 연속된 사탕 개수를 구하려면 +1 이 필요
  const temp = Math.max(num - continuousX.size(), num - continuousY.size())
  const continuous = temp === 1 ? 0 : temp + 1

  if (continuous > maxContinuous) {
    maxContinuous = continuous
  }
}

if (maxContinuous === num) {
  console.log(num)
  process.exit(0)
}

const search = pickArr => {
  const temp = new Set(pickArr)
  const continuous = num - temp.size() === 1 ? 0 : temp.size() + 1

  if (continuous > maxContinuous) {
    maxContinuous = continuous
  }
}

for (let i = 0; i < num; i++) {
  for (let j = 1; j < num; j++) {
    if (board[i][j - 1] !== board[i][j]) {
      const tempXArr = [...board[i]]
      tempXArr[j] = board[i][j - 1]
      tempXArr[j - 1] = board[i][j]

      // 바꾼 j, j-1 세로열까지 바꾸고 search 돌리기.

      search(tempXArr)
    }
  }
}

// 위 X열 서로 바꾼 것 처럼 Y열도 세로로 바꾸기. array X, Y 대칭