ABOUT ME

Today
Yesterday
Total
  • [99클럽] stack 구현
    알고리즘/코딩테스트 문제 정리 2025. 2. 3. 14:14

    백준 10828번

     


    🌈 문제 풀기 전 내 생각

    1. 간단하게 stack에 대한 조건을 하나씩 구현해나가면 될 것 같다 문제를 잘 읽고 풀어보자.

    소요 시간: 30분

     


     

    ☄️ 문제 풀이 코드

    import sys
    # stack 실버 4
    def beginner():
        N = int(input())
        stack = []
        for _ in range(N):
            action = sys.stdin.readline().split()
            if len(action) > 1:
                _, value = action
                stack.append(value)
            elif 'top' in action:
                print(stack[len(stack) - 1])
            elif 'size' in action:
                print(len(stack))
            elif 'empty' in action:
                print(int(len(stack) == 0))
            else:
                if len(stack) == 0:
                    print(-1)
                else:
                    print(stack.pop())
            print(stack)
    beginner()
    • 문제를 풀면서 2번의 에러를 만나게 되었는데 처음에는 RuntimeError(IndexError), 두번째는 출력 초과로 왜 이렇게 나왔는지 잘 몰랐지만 해결할 수 있었다. 처음에 의심했던 부분은 조건문 부분인데 'top' == action[0]이 부분을 "top" in action 이런식으로 조건을 만든 것과 input()으로 값을 가져올 때가 문제일 수도 있다 생각했지만 아니였다.
    • 이후 코드를 분석하면서 top에서의 코드 중 stack[len(stack) - 1]에서 len(stack)일 때 0을 출력한 뒤 stack[-1]이면 문제가 생긴다는 것을 알게 되었다. 즉 값이 없는 배열에서 stack[-1]을 사용하면 indexError가 발생한다.
    • 이후 출력초과는 어떤 부분에서 발생했는지 잘 모르겠지만 해당 사항을 고쳤더니 해결이 되었다.

     

    ☄️ 최종 결과 코드

    import sys
    
    def beginner():
        N = int(sys.stdin.readline())
        stack = []
        
        for _ in range(N):
            action = sys.stdin.readline().split()
    
            if len(action) > 1:  # push X
                _, value = action
                stack.append(value)
            
            elif action[0] == 'top':  # top
                print(stack[-1] if stack else -1)
            
            elif action[0] == 'size':  # size
                print(len(stack))
            
            elif action[0] == 'empty':  # empty
                print(1 if not stack else 0)
            
            elif action[0] == 'pop':  # pop
                print(stack.pop() if stack else -1)
    
    beginner()
    • 빈 배열은 Falsly한 값인데 이걸 자꾸 헷갈린다.
    • python에서의 삼항 연산자 사용 방법을 알게되었다 (자주 애용할 듯)
      • 값1 if 조건 else 값 2:True일 경우 값1을 False일 경우 값2를 출력

     


     

    '알고리즘 > 코딩테스트 문제 정리' 카테고리의 다른 글

    [백준] 이분탐색 실버  (0) 2025.02.11
    [99클럽] 왜지...?  (1) 2025.02.04
    [99클럽] 이분탐색 활용  (0) 2025.01.22
    [99클럽] dict 활용 초급  (1) 2025.01.20
    [99클럽] 입력  (0) 2025.01.16

    댓글

Designed by Tistory.