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

박준혁 - Niro·2024년 3월 28일
1

프로그래머스

목록 보기
5/12
post-thumbnail

🔗 문제 링크


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

✅ 풀이


같은 알파벳 2개가 붙어있는지 확인하는게 가장 중요한거 같았다

처음에는 같은 문자가 붙어있는지 확인하기 위해 인덱스를 활용하여 앞뒤를 비교했지만...

인덱스를 활용해서 제거를 하게 되면 배열 자체가 바뀌기 때문에 인덱스 오류가 발생하여 굉장히 꼬이게 되는 문제점이 있었다...

직접 배열을 관리하기 보다 문자가 붙어있는 걸 stack 을 활용하여 풀어보고자 했다

⌨️ 풀이 방법

func solution(_ s:String) -> Int {
    
    var stack = [String]()
    var str = s.map{String($0)}
    
    for i in 0..<s.count {
        if !stack.isEmpty {
            if stack.last! == str[i] {
                stack.popLast()!
            } else {
                stack.append(str[i])
            }
        } else {
            stack.append(str[i])
        }
    }
    
    return stack.isEmpty ? 1 : 0
}  
  1. stack 이 비어있다면 문자를 추가
  2. stack 에 데이터가 존재할 시 마지막 문자를 꺼내어 str 의 문자와 같을 시 stack 의 마지막 문자를 제거
  3. 같지 않다면 stack 에 str 의 문자를 추가

이 과정을 반복해서 stack 이 비어있다면 반복되는 문자로만 존재하기 때문에 1 을 반환,

stack 이 비어있지 않다면 연속적으로 같은 문자가 없기 때문에 0을 반환하게 됩니다

이 문제는 특이하게도 효율성 테스트가 존재하는데...
제출을 눌러놓고 다른 작업을 하게되면 테스트가 틀릴때가 있더라구요..?

다시 제출하면 다시 다 통과하구요..

이런 문제는 제출을 누르면 꼭 다 채점 할때까지 기다리는게 필수인거 같습니다!

profile
📱iOS Developer, 🍎 Apple Developer Academy @ POSTECH 1st, 💻 DO SOPT 33th iOS Part

0개의 댓글