jujuwon
시크릿주주
jujuwon
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • 🔠 프로그래밍언어 (35)
      • ☕️ Java (19)
      • 🐠 Python (15)
      • 🍠 Kotlin (1)
    • 🔙 Backend (16)
      • 🌿 Springboot (12)
      • 🐳 Docker (1)
      • ☁️ AWS (3)
    • 💼 CS (12)
      • 📶 Network (12)
    • 🕹 알고리즘 (14)
      • 📑 스터디 (2)
      • 💁🏻‍♂️ 백준 (9)
      • 👨🏼‍🔬 프로그래머스 (3)
    • 📚 Book (8)
      • 🔎 오브젝트 (4)
      • 🧪 TDD (2)
      • 📜 논문 (2)
    • 🔐 보안 (7)
      • 👾 Pwnable (7)
    • 📝 회고 (4)
    • 🧩 etc. (10)
      • ⚠️ issue (2)
      • 💡 꿀팁 (7)
      • ✏️ 끄적 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.
jujuwon

시크릿주주

백준 :: 2493번 탑 (Python)
🕹 알고리즘/💁🏻‍♂️ 백준

백준 :: 2493번 탑 (Python)

2023. 6. 5. 01:11
반응형

문제 링크

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

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

접근 방식

문제를 보고 현재 탑보다 이전(왼쪽)에 있는 탑들 중 일단 거리가 가깝고, 현재 탑보다 높이가 크거나 같은 탑이 몇번 인덱스인지 확인하면 되겠다는 생각이 들었다.

예를 들어 예시 입력인 6 9 5 7 4 에서 높이가 5인 탑은 높이가 6인 탑이 있든 없든 상관이 없다.

그래서 스택으로 탑들을 쌓아나가면서 높이를 비교해나가기로 생각했다.

  1. 스택이 비면 0 출력
  2. 수신할 수 있는 탑을 찾을 때까지 스택 탐색
    • 현재 탑보다 작은 탑은 pop (뒤 탑들 입장에선 현재 탑보다 작은 앞쪽 탑은 필요없다)
    • 수신할 수 있는 탑을 찾으면 해당 탑의 인덱스 출력
  3. 현재 탑을 스택에 push

풀이 코드

import sys

def input():
    return sys.stdin.readline()

N = int(input())
towers = list(map(int, input().split()))

stack = []
answer = []

'''
스택이 비면 0
수신탑 찾을 때까지 peek.
    나보다 작은 값은 뒤 탑들에겐 필요없으므로 pop
    수신탑 찾으면 해당탑의 idx + 1 출력
나 push
'''
for idx, tower in enumerate(towers):
    while stack:
        if stack[-1][0] < tower:
            stack.pop()
        else:
            answer.append(str(stack[-1][1]))
            break
    else:
        answer.append(str(0))
    stack.append((tower, idx+1))

print(' '.join(answer))

끝.

728x90
반응형
저작자표시 (새창열림)
    '🕹 알고리즘/💁🏻‍♂️ 백준' 카테고리의 다른 글
    • 백준 :: 1043번 거짓말 (Python)
    • 백준 :: 7570번 줄 세우기 (Python)
    • 백준 :: 1213번 팰린드롬 만들기 (Python)
    • 백준 :: 1254번 팰린드롬 만들기 (Python)
    jujuwon
    jujuwon

    티스토리툴바