99클럽 코테 스터디 25일차 TIL - 스택/큐
오늘의 학습 키워드
스택/큐
오늘 공부한 내용
스택/큐
오늘의 회고
오늘의 문제는 문자열 배열일 주어지고 아래와 같은 조건이 있었다.
- 숫자라면 stack에append()
- ‘C’ 라면 stack에서pop()
- ‘D’ 라면 stack의 마지막 요소 * 2
- ’+’ 라면 stack의 마지막 요소 +stack의 마지막 전 요소
문제를 보고 조건문을 잘 사용하면 풀이가 쉽게 될 것이라 생각했다.
시간도 오래 걸리지 않고 풀이는 쉽게 되었지만, 다른 사람의 풀이와 비교해보니 풀이가 엉망이였다는 것을 깨달았다. 너무 성급하게 풀이를 했던 것 같다.
내일 문제는 좀 더 차분하게 풀 수 있도록 노력해야겠다.
결과물
문제내용
특이한 baseballgame을 할려고 한다. 문자열 배열이 주어진다. 문자열 배열을 하나씩 순회하면서 record에 작성한다.
- 숫자라면 레코드에 그 숫자를 추가한다.
- ’+’ 라면 현재 문자열 배열 마지막 요소와 마지막 이전 요소를 더한다.
- ‘C’ 라면 레코드에서 숫자를 제거한다.
- ‘D’ 라면 문자열 배열 마지막 요소 * 2을 한다.
풀이 방법
나의 문제 풀이방법
- record를 초기화한다. 주어진 문자열 배열이 비어있을 때까지 요소를 순회한다.
- 요소 문자열 배열 요소를 하나씩 pop()을 통해 target으로 잡는다.
- target을 integer로 변환을 시도하다가 문제가 생기면 Exception에 있는 조건을 처리한다. (문제점)
- target이 ‘C’일 경우 record에 추가되어있는 요소를 pop()한다.
- target이 ‘D’일 경우 문자열 배열 마지막 요소가 음수인지 양수지인지 판단하여 * 2를 해준다. (문제점)
- target이 ‘+’일 경우 문자열 배열 마지막 요소와 배열 이전 요소를 더한다.
- record 요소를 모두 더한 값을 반환한다.
class Solution:
    def calPoints(self, operations: List[str]) -> int:
        record = []
        result = 0
    
        
        while operations:
            target = operations.pop(0)
                        
            try:
                operation = int(target)
                record.append(operation)
            except Exception as e:
                if target == 'C':
                    record.pop()
                elif target == 'D':
                    if abs(record[len(record) - 2]) < 0:
                        record.append((record[len(record) - 1] * 2) * -1)
                    else:
                        record.append(record[len(record) - 1] * 2)
                elif target == '+':
                    record.append(record[len(record) -2] + record[len(record) - 1])
            
        return sum(record)
다른 사람의 문제 풀이
- stack을 초기화한다.
- operations를 하나씩 순회하면서 꺼낸다.
- 꺼낸 요소가 ‘+’ 인지 판별한다.
    - ’+’가 맞다면 stack마지막 요소와 이전 요소를 더한 후 stack에 추가시킨다.
 
- 꺼낸 요소가 ‘C’ 인지 판별한다.
    - ‘C’가 맞다면 stack마지막 요소를 pop()시킨다.
 
- ‘C’가 맞다면 stack마지막 요소를 
- 꺼낸 요소가 ‘D’ 인지 판별한다.
    - ‘D’가 맞다면 2 * stack의 마지막요소를 stack에 추가시킨다.
 
- 모든 조건에 맞지 않는다면 stack에 꺼낸요소를 integer로 변환시켜 stack에 추가시킨다.
- stack 요소에 있는 모든 요소를 더한 것을 반환한다.
class Solution(object):
    def calPoints(self, ops):
        stack = []
        for op in ops:
            if op == '+':
                stack.append(stack[-1] + stack[-2])
            elif op == 'C':
                stack.pop()
            elif op == 'D':
                stack.append(2 * stack[-1])
            else:
                stack.append(int(op))
        return sum(stack)
 
      
댓글남기기