본문 바로가기

대외활동

패스트캠퍼스 Python 코딩테스트 강의 4주차

이번 강의에서는 백준 10828, 10773, 1874번을 학습하였다.

세 문제 모두 스택 구현 문제로 스택의 기본 원리를 파악할 수 있는 시간이었다.

 

 

1.10828

10828번: 스택 (acmicpc.net)

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

스택 문제로 스택의 기본 메소드들을 구현하는 문제였다.

실버 5단계였는데 어렵지 않게 통과할 수 있었다.

파이썬에서의 스택은 단순 리스트를 사용하여 구현할 수 있으며 

append(), pop() 메소드를 사용한다.

import sys
input = sys.stdin.readline
n = int(input())
stack=[]

for i in range(n):
    
    com = input().split()
    
    if com[0] == 'push':
        stack.append(com[1])        
    elif com[0] == 'pop':
        if len(stack)>0:
            x = stack.pop()
            print(x)
        else:
            print(-1)
    elif com[0] == 'size':
        print(len(stack))
    elif com[0] == 'empty':
        if len(stack)>0:
            print(0)
        else:
            print(1)
    elif com[0] == 'top':
        if len(stack)>0:
            print(stack[-1])
        else:
            print(-1)

 

 

2.10773

10773번: 제로 (acmicpc.net)

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net

단순한 스택 문제이다.

입력으로 0이 주어진다면 가장 최근에 입력된 원소를 제거해주면 되는데

스택의 pop() 메서드를 사용하여 제거하면 된다.

짧은 코드로 구현이 가능한 문제였다.

import sys
input = sys.stdin.readline

stack=[]
for _ in range(int(input())):
    n = int(input())
    
    if n == 0:
        stack.pop()
    else:
        stack.append(n)
        
print(sum(stack))

 

3.1874

1874번: 스택 수열 (acmicpc.net)

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

스택을 시뮬레이션 하듯이 생각해보면

아이디어를 찾아낼 수 있다.

 

특정한 수 x가 될 때까지 스택에 넣고 x를 pop한다.

만약 스택의 top()보다 x가 더 작다면 수열을 만드는 것이 불가능함을 알 수 있다.

n = int(input())
stack = []
answer = []
flag = 0
cur = 1
for i in range(n):
    num = int(input())
    while cur <= num:    
        stack.append(cur)
        answer.append("+")
        cur += 1

    if stack[-1] == num:   
        stack.pop()         
        answer.append("-")
    else:                   
        print("NO")         
        flag = 1            
        break               

if flag == 0:
    for i in answer:
        print(i)

 

 

 

*수강 인증샷

 

 

"본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다."

패스트캠퍼스 온라인 강의 - 초격차 패키지 : 개발자 취업 합격 패스 With 코딩테스트, 기술면접 (fastcampus.co.kr)

 

패스트캠퍼스 온라인 강의 - 초격차 패키지 : 개발자 취업 합격 패스 With 코딩테스트, 기술면접

 

fastcampus.co.kr

 

728x90