[Python] BOJ 1874번: 스택 수열

2023. 7. 21. 06:32·Tip
728x90
 

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

배경

특별히 문제가 어렵다는 것은 아니고,
문제에 기술된 정의 그대로 자료구조를 설계한다는 목적에 사로잡혀

최적화를 놓친 경우를 기록하고자 한다.


1차 시도

코드 전문

더보기
import sys

arr = list(map(int, sys.stdin.readlines()))

IN = [n for n in range(1, arr[0] + 1)]
stack = [0]
res = []

for ar in arr[1:]:
    while stack[-1] < ar:
        res.append('+')
        stack.append(IN.pop(0))

    if stack[-1] == ar:
        res.append('-')
        stack.pop(-1)
    else:
        break

if len(IN) == 0 and len(stack) == 1:
    print(*res, sep='\n')
else:
    print('NO')

1부터 N까지 순차적으로 나열된 숫자로부터의 연산을 진행하기 위해

IN = [n for n in range(1, N+1)] 형태로 배열을 선언하고

이후 IN.pop(0)를 통해 뽑아쓰는 것이 화근이었다.

pop 연산은 단순히 값을 읽어오는 것뿐만 아니라 자료구조의 형태를 변화시키므로 비싼 연산임을 명심하자.


2차 시도

코드 전문

더보기
import sys

arr = list(map(int, sys.stdin.readlines()))

IN = 1
stack = [0]
res = []

for ar in arr[1:]:
    while stack[-1] < ar:
        res.append('+')
        stack.append(IN)
        IN += 1

    if stack[-1] == ar:
        res.append('-')
        stack.pop(-1)
    else:
        break

if IN == arr[0] + 1 and len(stack) == 1:
    print(*res, sep='\n')
else:
    print('NO')

어차피 순서대로 증가시키며 입력하는 과정을 반복하는 것이므로

IN = 1로 설정하고, IN을 입력한 후, IN += 1로 증가시켰다.

728x90
저작자표시 비영리 동일조건 (새창열림)

'Tip' 카테고리의 다른 글

객체지향 특징 - 캡슐화, 정보 은닉  (4) 2024.01.11
이력서 작성 요령  (2) 2024.01.08
[JavaScript] IntersectionObserver API 활용 이벤트 처리  (0) 2023.07.17
[Python/pandas/scikit-learn] 빅데이터 분석기사 실기 유형2 풀이 샘플  (0) 2023.07.17
[Python] BOJ 10815번: 숫자 카드  (0) 2023.07.16
'Tip' 카테고리의 다른 글
  • 객체지향 특징 - 캡슐화, 정보 은닉
  • 이력서 작성 요령
  • [JavaScript] IntersectionObserver API 활용 이벤트 처리
  • [Python/pandas/scikit-learn] 빅데이터 분석기사 실기 유형2 풀이 샘플
ooMia
ooMia
  • ooMia
    데이터 과학자의 꿈
    ooMia
  • 전체
    오늘
    어제
    • 분류 전체보기 (116)
      • Insight (24)
        • 서평 (20)
      • Learn (43)
        • UPSIDE (22)
        • ASAC (4)
        • 우테코 (4)
      • Tip (24)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Velog.io
    • GitHub
    • Linked-in
    • Instagram
    • Solved.ac
  • 공지사항

  • 인기 글

  • 태그

    for 반복문
    티스토리챌린지
    K디지털기초역량훈련
    한빛미디어
    쉬움
    가이드
    매우 쉬움
    C언어
    나도 할 수 있는 Java&Spring 웹 개발 종합반
    web3
    오블완
    DAPP
    내일배움카드
    업사이드
    SQL 데이터 분석 첫걸음
    우테코
    패스트캠퍼스
    업사이드 아카데미
    국비지원교육
    한빛미디어서평단
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ooMia
[Python] BOJ 1874번: 스택 수열
상단으로

티스토리툴바