[Swift]BOJ-3085

BOJ-3085, 사탕 게임

문제 📑

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

 

문제 정리 

BOJ-3085

  • 보드의 크기(N)을 입력 받는다.
  • 각 행엔 C(빨간색), P(파란색), Z(초록색), Y(노란색)으로 된 문자열을 개행 입력 받는다.
  • 보드에서 한 가지 사탕만을 최대로 먹기 위해 인접한 칸의 다른 사탕과 바꾸려고 한다.
    이때 최대로 먹을 수 있는 사탕의 개수를 출력한다.

 

접근 🚶🏻

나의 생각 

  • N의 최대 크기는 50으로 모든 경우를 따져볼 때 최대로 따지는 경우의 수는 50*50으로 브루트포스로 접근해도 무방할 거 같아 브루트포스로 구현해야겠다고 생각했다.
  • 해당 문제를 각각 하나씩 원소를 바꿔주고 검사해보고 다시 원상태로 돌려놓으면서 모든 경우를 찾아보면 풀 수 있을 것이라고 생각했다.

 

내 코드 

let n = Int(readLine()!)!
var candies = [[String]]()
var visited = Array(repeating: Array(repeating: false, count: n), count: n)

for _ in 0..<n {
    candies.append(readLine()!.map{ String($0) })
}

// MARK: 값 바꿔주기
func swapValue(board: inout [[String]], _ i: Int, _ j: Int, _ mode: String) {
    if mode == "col" {
        let temp = board[i][j]
        board[i][j] = board[i][j+1]
        board[i][j+1] = temp
    }
    else if mode == "row" {
        let temp = board[i][j]
        board[i][j] = board[i+1][j]
        board[i+1][j] = temp
    }
}

// MARK: 사탕의 최대 개수 세기
func check(_ board: [[String]]) -> Int {
    var cnt: Int = 0
    var ans: Int = 1
    for i in 0..<board.count {
        cnt = 1
        for j in 0..<board[i].count-1 {
            if board[i][j] == board[i][j+1] { cnt += 1 }
            else { cnt = 1 }
            ans = max(ans, cnt)
        }

        cnt = 1
        for j in 0..<board[i].count-1 {
            if board[j][i] == board[j+1][i] { cnt += 1 }
            else { cnt = 1 }
            ans = max(ans, cnt)
        }
    }

    return ans
}


var result: Int = 0

for i in 0..<n {
    for j in 0..<n {
        if j < n-1 {
            swapValue(board: &candies, i, j, "col")
            result = max(check(candies), result)
            swapValue(board: &candies, i, j, "col")
        }

        if i < n-1 {
            swapValue(board: &candies, i, j, "row")
            result = max(check(candies), result)
            swapValue(board: &candies, i, j, "row")
        }

    }
}

print(result)

 

 

Addtional 📂

  • check 함수에서 cnt 초기화를 해주는걸 깜빡해서 오래 걸렸다..
  • 맞왜틀 맞왜틀...
  • 앞으로 코드를 짤 때 더욱 신중하게 풀어야겠다..

'Algorithm.zip' 카테고리의 다른 글

[Swift]BOJ-3190  (0) 2022.07.12
[Swift]BOJ-1744  (0) 2022.04.07
[Swift]BOJ-16953  (0) 2022.04.06
[Swift]BOJ-1946  (0) 2022.04.06
[Swift]BOJ-1026  (0) 2022.04.04