반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. [백준 알고리즘] 백준 1874번 스택 수열 파이썬(Python)

1) 문제번호 : 1874번

 

2) 문제 출처

https://www.acmicpc.net/problem/1874

 

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분 내에 풀어버린다는 학교의 전설이 내려올 정도였는데, 이런 킹ㅡ갓 효진에게도 고민이 생겼다. 대부분의 문제에서 반복되는 연산이 있었기 때문이다! 이 연산은 너무 길어서 종이에 풀던 효진이는 너무 고통스러워서, 자신이 새로 연산자를 만들기로 했다.

연산자의 기호는 @으로, A@B = (A+B)×(A-B)으로 정의내리기로 했다.

하지만, 효진이는 막상 큰 숫자가 들어오자 계산하기 너무 귀찮아졌다.

효진이를 도와 정수 A, B가 주어지면 A@B를 계산하는 프로그램을 만들어주자!

 

3. 제약사항


4. 입력

첫째 줄에 A, B가 주어진다. (1 ≤ A, B ≤ 100,000)

 

5. 출력

 첫째 줄에 A@B의 결과를 출력한다.

 

6. 풀이

- 이 문제를 이해하면 쉬운 문제다.

- 1부터 num까지만 스택에 입력을 받는데, num이 스택의 맨 위와 같으면 pop을 하면 된다.

- 근데, 여기서 중요한 것은 출력초과다.

- push를 하면 '+', pop을 하면 '-'를 출력하면 되는데, 그 순간부터 계속 push와 pop을 할 때 '+'와 '-'을 출력했는데, 만약 스택이 만들어지지 않으면 NO만 출력해야 하는데, '+'와 '-'를 출력하다가 NO를 출력한다. 그래서, 따로 리스트를 받아서 맨 마지막에 출력했다.

7. 소스 코드

import sys
input = sys.stdin.readline

#입력값 N
N = int(input())

#스택
stack = []

#스택에 넣는 값
count = 1

#결과를 모으는 리스트
result=[]

for i in range(N):
    #값 입력
    num = int(input())

    #num값까지 스택에 push
    while count<=num:
        stack.append(count)
        result.append('+')
        count+=1

    #스택 맨 위에 있는 값이 num이면 pop
    if stack[-1]==num:
        stack.pop()
        result.append('-')

    else :
        print("NO")
        exit(0)

for i in result:
    print(i)

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기