Where who wants to meet someone

배열 만들기 6 본문

728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/181859

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 답안 / 다른 사람들의 답안

import Foundation

func solution(_ arr:[Int]) -> [Int] {
    var i = 0
    var stk = [Int]()

    while i < arr.count {
        if stk.last == arr[i] {
            stk.removeLast()
        } else {
            stk.append(arr[i])
        }

        i += 1
    }

    return stk.isEmpty ? [-1] : stk
}

- while문을 통해 작업을 반복 수행

- 세 가지의 경우가 있으나 두 가지는 수행하는 코드가 똑같아 if...else를 통해 두 경우로 나누어 수행 후 반환

 

// 풀이 1
import Foundation

func solution(_ arr:[Int]) -> [Int] {
    var stack = [Int]()
    arr.forEach { 
        if let last = stack.last, last == $0 { stack.removeLast() } 
        else { stack.append($0) }
    }
    return stack.isEmpty ? [-1] : stack
}

// 풀이 2
import Foundation

func solution(_ arr:[Int]) -> [Int] {
    var stk: [Int] = []
    var i = 0
    while i < arr.count {
        if stk.isEmpty {
            stk.append(arr[i])
            i += 1
        } else if stk.last! == arr[i] {
            stk.removeLast()
            i += 1
        } else {
            stk.append(arr[i])
            i += 1
        }
    }

    return stk.isEmpty ? [-1] : stk
}

- 어차피 i는 어떤 작업에서도 +1이 되므로 arr의 크기보다 작아야 하는 조건과 결합하면 arr.forEach로 해결할 수도 있는 문제였다.

 

점수: +2