스택 수열 과제톡 발표 자료

tk_jang·2022년 5월 16일
0

알고리즘

목록 보기
3/7

스택 이란?

위의 설명처럼 나중에 들어온것이 먼저 나아갈수있는 블럭쌓기 형식이라고볼수있다

1.문제

나는 일단 문제 이해부터가 몇시간동안 되지않았다
다른나라 언어인줄알았다 오름차순이라는데 왜 1,2,3,4,5,6,7,8 이 아닌것인가...
입력에 써 있는 말도 이해가 안갔다 모든게 이해가 안가서 리트코드 홈페이지에서 스택수열 문제를 찾아봤다

1) 참고문제

두 개의 정수 배열이 주어 pushed지고 popped각각 고유한 값 true이 있는 경우 이것이 초기에 비어 있는 스택에 대한 푸시 및 팝 작업 시퀀스의 결과였거나 false그렇지 않은 경우 반환합니다.

위의문제를 보고 이해가 갔다
입력의 첫출의 8 은 1~8까지 숫자배열 이란 뜻이고
그 다음줄 부터 순서대로[4,3,6,8,7,5,2,1] 의 배열인것이다
입력값은
8 과 [4,3,6,8,7,5,2,1]
그래서 1~8까지의 숫자배열을 스택을 사용해서 [4,3,6,8,7,5,2,1]로 만들라는 문제이다.

2. 풀이

class Solution:
    def validateStackSequences(self, pushed: int, popped: List[int]) -> Union[str, List[str]]:
        stack = []
        result = []
        j= 0
        for i in range(pushed):
            stack.append(i+1)
            result.append("+")
            while stack and j < len(popped) and popped[j] == stack[-1]:
                j += 1
                stack.pop()
                result.append("-")

        if j != len(popped):
            return "NO"
        return result

먼저 우리가 스택 설명에 써있던 블럭이 담긴그림을 생각하자

우리는 1~8까지의 블럭을 가지고있다. 해당 블럭을 [4,3,6,8,7,5,2,1] 순서대로 넣고 싶다

그러기위해 일단 빈통 stack과 정답을 적을 result를 준비해준다.

이후 stack.pop 숫자를 세어주기 위해 j를 0으로 선언한다.

이제 기본 준비는 끝났다 이제 stack에 블럭을 오름차순으로 일단 넣어주면서 result에 "+"를 넣어준다.

stack에 오름차순으로 넣다가 [4,3,6,8,7,5,2,1] 에 j 번째와 우리가 넣은 블럭의 숫자가 같다면

stack.pop()으로 제거 하고 result에 "-"를 넣어준다.

해당 반복문을 반복하다보면 result의 값이 ['+', '+', '+', '+', '-', '-', '+', '+', '-', '+', '+', '-', '-', '-', '-', '-'] 가 나온다 정답과 일치한다.

3. 느낀점

오늘의 경우 stack 이라는 자료는 잘 이해가 갔다.
하지만 문제를 이해하지못했다 이건 경험의 문제라서 이해하지 못한것같다 경험을 더 쌓으면 될것같다.

0개의 댓글