[백준/Python] 2493번 - 탑

2023. 9. 1. 03:27·Algorithm/BaekJoon
import sys
input = sys.stdin.readline

n = int(input())
b = list(map(int, input().split()))

## 틀린 풀이
# 수신한 탑들의 번호 출력
result = [0]
h = 0 # 가장 높은 빌딩의 index
for i in range(1,n):
  if b[h] > b[i]:
    result.append(h+1)
  else:
    result.append(0)

  # 뒤 차례 기준, 가장 가깝고 + 높은 빌딩
  if i != n -1 and b[i] > b[i + 1]:
    h = i

print(*result)

처음에 했던 틀린 풀이...

틀렸습니다가 떴다. 당연했던게 바로 왼쪽 빌딩 1개만 보고, 현재 빌딩보다 높지않으면 0을 넣어준다.

왼쪽에 있는 다른 빌딩 중에 현재 빌딩보다 높은 빌딩이 있을 수도 있기 때문에 바로 0을 넣어주면 안된다!!

 

 

결국 알고리즘 분류보고 스택 문제라는 힌트를 가지고 풀었다.

import sys
input = sys.stdin.readline

n = int(input())
b = list(map(int, input().split()))

result = [0]
stack = [0] # index를 stack으로 쌓기
for i in range(1, n):
  while stack and b[stack[-1]] <= b[i]:
    stack.pop()
  
  if not stack:
    result.append(0)
  else:
    result.append(stack[-1]+1)
  
  stack.append(i)

print(*result)

풀이 과정

  1. 먼저 index를 결과로 쌓아야 하기 때문에 stack도 index로 쌓았다.
  2. 스택의 맨 위(가장 가까운 왼쪽 빌딩)의 높이가 현재 빌딩 높이보다 낮으면 스택에서 제외하면서, 왼쪽에서 나보다 높은 빌딩을 찾는다.
  3. 높은 빌딩을 찾지 못하면 stack은 결국 empty가 될 것이고, 그럴 경우 수신을 할 빌딩이 없는 것이므로 결과에 0 을 추가한다.
    높은 빌딩을 찾았다면 stack에 남아있는 index가 있을 것이고, 해당 빌딩이 신호를 수신할 빌딩이 되므로 결과에 햔제 index+1을 추가한다(빌딩 index는 1부터 시작이라서 +1)
  4. 그리고 현재 빌딩 index를 추가한다.

'Algorithm > BaekJoon' 카테고리의 다른 글

[백준/Python] 2573번 - 빙산  (0) 2023.09.06
[백준/Python] 2170 - 선 긋기  (0) 2023.09.02
[백준/Python] 1874번 - 스택 수열  (0) 2023.09.02
[백준/Python] 10828번 - 스택  (0) 2023.09.01
[백준/Python] 15903번 - 카드 합체 놀이  (0) 2023.09.01
'Algorithm/BaekJoon' 카테고리의 다른 글
  • [백준/Python] 2170 - 선 긋기
  • [백준/Python] 1874번 - 스택 수열
  • [백준/Python] 10828번 - 스택
  • [백준/Python] 15903번 - 카드 합체 놀이
빵빵0
빵빵0
(아직은) 공부하고 정리하는 블로그입니다.
  • 빵빵0
    Hack Your World
    빵빵0
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • Error Handling (7)
      • Project (5)
        • MEV (2)
      • Architecture (0)
        • API (0)
        • Cache (0)
        • 사소한 고민거리 (0)
      • Computer Science (4)
        • Data Structure (2)
        • Database (1)
        • Cloud (0)
        • OS (0)
        • Infra, Network (1)
        • AI (0)
      • Language (8)
        • Go (8)
        • Rust (0)
        • Python (0)
        • Java (0)
      • Algorithm (40)
        • BaekJoon (18)
        • Programmers (7)
        • LeetCode (6)
        • NeetCode (9)
      • SW Books (9)
        • gRPC Up & Running (1)
        • System Design Interview (2)
        • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (6)
        • 블록체인 해설서 (0)
        • 후니의 쉽게 쓴 CISCO 네트워킹 (0)
      • BlockChain (4)
        • Issues (0)
        • Research (4)
        • Tech (0)
      • Own (8)
        • TIR(Today I Read) (3)
        • Personal (2)
        • Novel (0)
        • Memo (3)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    goroutine
    스택
    블록체인
    two pointer
    MongoDB
    Python
    MEV
    Hash Table
    BaekJoon
    chart
    큐
    프로그래머스
    2024
    Greedy
    백준
    LeetCode
    Programmers
    BFS
    Palindrome
    DP
    blockchain
    EVM
    KBW
    golang
    NeetCode
    ethereum
    candlechart
    context
    BEAKJOON
    go
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
빵빵0
[백준/Python] 2493번 - 탑
상단으로

티스토리툴바