예전에 한 번 C++로 풀어봤던 문제.

이상했던 건 같은 코드를 제출했는데 한 번은 시간초과가 나서

이상하다? 싶어서 다시 돌려봤더니 통과.

아마도 오류인 듯 하다.

 

풀이 로직은 이렇다.

board의 열(column)을 기준으로 하나씩 위에서부터 살펴보는데,

만약 board[행][열]이 0이면 그냥 넘어가고,

0이 아니면, 즉 꺼낼 값이 있다면 해당 값을 어떤 Int 배열에 추가한다.

그리고 나서, 해당 Int 배열의 마지막 두 요소를 비교해 두 개가 같으면 

해당 배열에서 마지막 두 요소를 빼주고,

정답 변수에 2를 더한다.

 

정답 코드는 아래와 같다.

 

import Foundation

func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
    var answerArray = [Int]()
    var answer = 0
    var board = board
    var n = board[0].count
    for (index, move) in moves.enumerated() {
        for i in 0..<n {
            if board[i][move - 1] != 0 {
                answerArray.append(board[i][move - 1])
                board[i][move - 1] = 0
                break;
            }
        }
        if answerArray.count >= 2 && answerArray[answerArray.count - 1] == answerArray[answerArray.count - 2] {
            answerArray.removeLast()
            answerArray.removeLast()
            answer += 2
        } 
    }
    return answer
}

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom