[Swift / Python] 프로그래머스(Lv1) - 불량 사용자 (2019 카카오 개발자 겨울 인턴십 )

Kerri·2021년 6월 25일
1

코테

목록 보기
60/67

안녕하세요!

예전에 python으로 풀어보았던 문제를 swift로 다시 풀어봤습니다.

https://programmers.co.kr/learn/courses/30/lessons/64061

풀이

board의 행과 열을 바꾼 배열 arr을 만듭니다.
이동할 move위치에서 0이 아닌 값이 나오면 꺼내고 stack에 넣어줍니다.
stack에 중복된 인형이 연달아 들어오면 제거해줍니다.

Swift 코드입니다.

import Foundation

func moveDoll(_ arr: inout [[Int]], _ idx: Int, _ stack: inout [Int]) {
    var jdx = 0
    while jdx < arr.count {
        if arr[idx][jdx] != 0 {
            stack.append(arr[idx][jdx])
            arr[idx][jdx] = 0
            break
        } else {
            jdx += 1
        }
    }
}

func removeDoll(_ stack: inout [Int]) -> Int {
    if stack.count >= 2 {
        let lastIdx = stack.count - 1
        if stack[lastIdx] == stack[lastIdx - 1] {
            stack.popLast()
            stack.popLast()
            return 2
        }
    }
    
    return 0
}


func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
    var arr: [[Int]] = []
    for i in 0..<board.count {
        let temp = board.map { $0[i] }
        arr.append(temp)
    }
    
    var stack: [Int] = []
    var answer = 0
    for index in moves {
        let idx = index - 1
        moveDoll(&arr, idx, &stack)
        answer += removeDoll(&stack)
    }
    return answer
}

Python 코드입니다 :)

def solution(board, moves):
    answer = 0
    l = []
    for k in moves:
        for i in range(len(board)):
            if board[i][k-1] != 0:
                l.append(board[i][k-1])
                board[i][k-1] = 0
                break
    c = True
    while c:
        if len(l) == 0:
            break
        for j in range(len(l)):
            if j + 1 < len(l) and l[j] == l[j+1]:
                answer += 2
                del l[j:j + 2]
                c = True
                break
            else:
                c = False
                
    return answer
profile
안녕하세요 !

0개의 댓글