-
[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