티스토리 뷰

반응형

 

 

 

 

 


Validate Stack Sequences 릿코드 문제설명

이번에 풀어볼 릿코드 문제는 Validate Stack Sequences입니다. 중복되지 않는 숫자가 존재하는 두개의 배열, pushed, popped가 먼저 주어집니다.

 

빈 스택에 pushed 배열을 하나하나 넣으면서 스택의 값이 popped배열의 0번째 값부터 차례대로 pop을 할 수 있는지를 확인합니다. 만약 popped 배열의 값을 순차적으로 pop 해낼 수 있으면 true를, 반대는 false를 반환합니다.

 

입출력 예시를 출력해보겠습니다. 

 

 

 


Validate Stack Sequences 릿코드 입출력 예시

입출력 예시는 위와 같습니다. Stack의 push / pop 연산을 수행하는데 특정 숫자를 순서대로 빼내지 못할 경우, false를 반환하는 문제입니다. swift언어를 통해 문제 풀어보겠습니다. 

 

 

 


Validate Stack Sequences 릿코드 swift 풀이

Solution 클래스의 함수 부분을 채워보겠습니다. 먼저 인자로 pushed, popped 배열을 받고 있습니다.

3 ~ 4행) 스택의 연산 수행을 위해 사용할 배열, stack과 현재 pop해야할 값을 바라보기 위해 사용되는 인덱스, jdx를 선언했습니다. 

 

 

 

 

 

5행) push해야하는 값이 있는 pushed를 순회합니다. 어찌하건, stack에는 pushed배열의 값이 차례대로 들어가야 하기 때문입니다. 

6행) 차례대로 stack에 pushed 배열의 값을 넣어줍니다. (push)

7 ~ 11행) push를 한 이후에 현재 값이 존재하고, 스택 top(last!) 값이 현재 pop해야하는 값(popped[jdx])과 같을 경우, popped의 다음 값을 바라보고, (jdx += 1) stack을 pop 처리합니다. 

 

 

 

 

pushed 배열을 전부 순회하고 나서도 추가 작업이 필요합니다. 아직 스택에서 popped 값들을 모두 pop처리할 수 있는지 확인합니다. 최종적으로, stack이 전부 비어있으면 popped의 값들을 순차적으로 무사히 pop했음을 의미하므로 true를 반환합니다. 

 

아래는 릿코드 swift 코드 제출결과 및 전체코드입니다. 성능은 그렇게 좋게 나오지는 않네요. 의견과 질문 환영합니다. 🤗

 

 

 

 

class Solution {
    func validateStackSequences(_ pushed: [Int], _ popped: [Int]) -> Bool {
        var stack: [Int] = []
        var jdx = 0
        pushed.forEach { puv in
            stack.append(puv)
            while !stack.isEmpty && stack.last! == popped[jdx] {
                jdx += 1
                stack.removeLast()
            }
        }
        
        while !stack.isEmpty && stack.last! == popped[jdx] {
            jdx += 1
            stack.removeLast()
        }
        
        return stack.isEmpty
    } 
}

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함