코드 공부

백준-알고리즘 기초 (1/2)-자료구조 1

유스베리이 2025. 6. 23. 18:26

다 풀었던 문제지만 복습차원 ..

⌨️ 10828번

import sys
N = int(sys.stdin.readline)
cmd_list = []
stack = []
for i in range(N):
    mylist = input().split()

    if mylist[0] == 'top':
        if len(stack) != 0:
            print(stack[-1])
        else:
            print(-1)
    elif mylist[0] == 'push':
        stack.append(mylist[1])
    elif mylist[0] == 'size':
        print(len(stack))
    elif mylist[0] == 'empty':
        if len(stack) == 0:
            print(1)
        else:
            print(0)
    elif mylist[0] == 'pop':
        if len(stack) == 0:
            print(-1)
        else:print(stack.pop())

 

 

👑 느낀점

  • 불필요한 함수 사용은 금지. 
  • input() 보다 sys.stdin.readline() 사용해야 시간초과가 안남.
  • 파이썬은 따로 stack 구조를 제공하지 않아 list 구조를 사용해야 함.

⌨️ 9093번

import sys
N = int(sys.stdin.readline())
stn = []
word =[]
for i in range(N):
    stn = input().split(' ')
    for j in stn:
        word.append(j[::-1])
    answer = " ".join(word)
    print(answer)

 

 

 

👑 느낀점

  • list의 각 value를 거꾸로 출력하기 위해서는 [::-1] 사용
  • " ".join(word) 를 사용해 단어 이어서 출력 

⌨️ 9012번

🤨 처음 짠 코드 

import sys
def solution(mylist):
    stack =[]
    for word in mylist:
        if word == "(" :
            stack.append(word)
        elif word == ")":
            if stack and stack[-1] == "(":
                stack.pop()
            else:
                print("NO")
                return 
    if not stack: print("YES")
    else: print("NO")
N = int(sys.stdin.readline())
for i in range(N):
    line = input().split()
    solution(line)

 

→ 결과값이 다 YES 만 나왔다. 이유를 알아보니 input.split()으로 문장을 받으면 '((()())))'이 하나의 값으로 list에 저장되어 결과가 이상하게 나왔다.

😛 수정된 코드

import sys
def solution(mylist):
    stack =[]
    for word in mylist:
        if word == "(" :
            stack.append(word)
        elif word == ")":
            if stack and stack[-1] == "(":
                stack.pop()
            else:
                print("NO")
                return
    if not stack: print("YES")
    else: print("NO")
N = int(sys.stdin.readline())
for i in range(N):
    line = input().strip()
    solution(line)

 

👑 느낀점

strip() vs split()

strip()

  • 입력 문자열의 앞뒤 공백 문자(스페이스, 탭, 개행 등)를 제거
  • 입력: '  hello world  \n' → 결과: 'hello world'

split()

  • 입력 문자열을 공백 기준으로 잘라서 리스트로 반환
  • 입력: 'hello world 123' → 결과: ['hello', 'world', '123']