문제
코딩테스트 연습 - 짝지어 제거하기 | 프로그래머스 스쿨
풀이
자료구조 스택(stack)의 개념
자료구조 스택을 이용하면 쉽게 풀 수 있다. 스택에 대해서는 아래 링크에 정리해 놨으니 확인해 보자.
스택의 삽입, 삭제
스택의 구현은 배열을 이용하여 메서드로 삽입(append), 삭제(removeLast)를 사용하면 된다.
- 매개변수를 배열로 변환하여 각 문자열의 문자 하나하나를 요소로 하는 배열(input)을 만든다.
- 스택(stack) 배열을 생성하고 input의 요소를 하나하나 삽입한다.
- 스택의 길이가 2 이상일 경우, 가장 나중에 들어온 요소 2개가 같은지 확인한다.
- 같을 경우 그 요소 2개를 제거한다.
스택의 길이 확인
input을 한번 반복했으니 스택의 길이를 확인해 보자.
- 스택이 비어 있으면 겹치는 단어가 모두 없어졌으므로 결괏값을 1로 반환,
- 그렇지 않으면 결괏값을 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로 구현해 봤는데 금방 풀렸다.
- 난이도가 어려워질수록 자료구조나 알고리즘 이론의 중요성을 실감한 문제였다.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] (Swift) 카펫 - Lv.2 (0) | 2023.05.10 |
---|---|
[프로그래머스] (Swift) 비밀지도 (2018 카카오 1차) - Lv.1 (0) | 2023.05.09 |
[프로그래머스] (Swift) 시저 암호 - Lv.1 (0) | 2023.05.02 |
[프로그래머스] (Swift) 다음 큰 숫자 - Lv.2 (0) | 2023.05.01 |
[프로그래머스] (Swift) 이진 변환 반복하기 - Lv.2 (0) | 2023.04.28 |
댓글