본문 바로가기
코딩 테스트/프로그래머스

[프로그래머스] (Swift) 짝지어 제거하기 - Lv.2

by Dev.Andy 2023. 5. 7.

문제

프로그래머스 문제 이미지 - 짝지어 제거하기 - Lv.2

코딩테스트 연습 - 짝지어 제거하기 | 프로그래머스 스쿨

 

풀이

자료구조 스택(stack)의 개념

자료구조 스택을 이용하면 쉽게 풀 수 있다. 스택에 대해서는 아래 링크에 정리해 놨으니 확인해 보자.

[자료구조] 스택(stack) in Python

 

[자료구조] 스택(stack) in Python

선형 자료구조(linear data structure) 중에서 스택(stack)에 대해 알아 보자. 스택(stack)을 사전에서 찾아보면 무더기, 더미라는 뜻의 영단어이다. 아래의 돌탑이 대표적인 스택이다. 📌 정의 A stack is an

andy-archive.tistory.com

스택의 삽입, 삭제

스택의 구현은 배열을 이용하여 메서드로 삽입(append), 삭제(removeLast)를 사용하면 된다.

  1. 매개변수를 배열로 변환하여 각 문자열의 문자 하나하나를 요소로 하는 배열(input)을 만든다.
  2. 스택(stack) 배열을 생성하고 input의 요소를 하나하나 삽입한다.
  3. 스택의 길이가 2 이상일 경우, 가장 나중에 들어온 요소 2개가 같은지 확인한다.
  4. 같을 경우 그 요소 2개를 제거한다.

스택의 길이 확인

input을 한번 반복했으니 스택의 길이를 확인해 보자.

  1. 스택이 비어 있으면 겹치는 단어가 모두 없어졌으므로 결괏값을 1로 반환,
  2. 그렇지 않으면 결괏값을 0으로 반환한다

 

코드

import Foundation

func solution(_ s:String) -> Int{
    // 매개변수를 Array로 변환하여 각 요소를 String으로 바꾸어 입력값으로 할당
    var input = Array(s).map { String($0) }
    
    // 결괏값을 0으로 할당
    var answer:Int = 0

    // 빈 스택 자료구조 선언
    var stack: [String] = []
    
    // 입력값에 대한 인덱스 범위를 할당
    var indexRange = input.count - 1
    
    // 입력값 배열을 반복
    for i in 0...indexRange {
        stack.append(input[i])
        
        // 스택의 길이가 2 이상일 때 마지막 두 요소가 같으면, 그 두 요소를 제거
        if stack.count >= 2 {
            let lastIndex = stack.count - 1
            if stack[lastIndex] == stack[lastIndex - 1] {
                stack.removeLast()
                stack.removeLast()
            }
        }
    }
    
    // 스택이 비어 있으면 결괏값을 1로 재할당
    if stack.isEmpty {
        answer = 1
    }

    // 결괏값 반환
    return answer
}

 

후기

  • 처음에는 단순한 배열을 반복하여 풀려고 했는데 중간중간 막히는 부분이 있었다.
  • flag나 새로운 문자열 할당 등 여러 시도를 해봤지만, 스택을 이용하면 금방 풀린다는 힌트를 얻었다.
  • 전에 스택에 대해 공부해서 이를 Swift로 구현해 봤는데 금방 풀렸다.
  • 난이도가 어려워질수록 자료구조나 알고리즘 이론의 중요성을 실감한 문제였다.

댓글