본문 바로가기

대외활동

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

 

이번 강의에서는 백준 1874 문제와 1966,5397 문제를 학습하였다.

 

 

1. 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

스택 문제로 이번 문제에서 핵심 아이디어 2가지는 다음과 같다.

1. 스택의 삽입

2. 스택에서 원소를 빼낼 때 내림차순을 유지할 수 있는가?

스택이 LIFO 성질을 가지고 있는것에 유의하여 코드를 작성하였다.

 

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)

 

 

2. 1966 

1966번: 프린터 큐 (acmicpc.net

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

이번 문제는 큐 문제이다.

큐의 특성을 활용하여 풀었다.

강의에서는 deque를 사용하지 않았으나,

파이썬에서 지원하는 deque를 사용하여 풀어보았다.

from collections import deque
n = int(input())


for i in range(n):
    n,m = map(int, input().split())
    
    q = list(map(int, input().split()))
    idx = list(range(len(q)))
    idx[m] = 'pv'
    
    order =0
    
    while True:
        if q[0] == max(q):
            order+=1
            
            if idx[0] == 'pv':
                print(order)
                break 
            else:
                q.pop(0)
                idx.pop(0)
        
        else:
            q.append(q.pop(0))
            idx.append(idx.pop(0))

 

 

3. 5397

5397번: 키로거 (acmicpc.net)

 

5397번: 키로거

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입

www.acmicpc.net

 

스택을 활용한 문제이다. 

시간이 꽤 걸렸는데 스택 두개를 활용하여 해결하면 된다.

 

1. 스택 두개를 만들고  두개의 중간 지점을 커서로 간주

2. 왼쪽 스택에 원소를 삽입.

3. 화살표가 나올 때 방향에 따라 각 스택으로 이동

 

test_case = int(input())

for i in range(test_case):
    l = []
    r=[]
    data=input()
    
    for i in data:
        if i=='-':
            if l:
                l.pop()
        elif i =='<':
            if l:
                r.append(l.pop())
        elif i=='>':
            if r:
                l.append(r.pop())
        else:
            l.append(i)
    
    l.extend(reversed(r))
    print(''.join(l))

 

 

 

*수강 인증샷

 

 

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

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

 

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

 

fastcampus.co.kr

 

 

728x90