ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 2493 탑 with Python
    PS 2022. 3. 14. 22:46
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 2493 탑

    πŸ’‘ 쑰건

    1. 일직선 μœ„μ— N개의 높이가 μ„œλ‘œ λ‹€λ₯Έ 탑을 μˆ˜ν‰ μ§μ„ μ˜ μ™Όμͺ½λΆ€ν„° 였λ₯Έμͺ½ λ°©ν–₯으둜 μ°¨λ‘€λ‘œ μ„Έμš°κ³ , 각 νƒ‘μ˜ κΌ­λŒ€κΈ°μ— λ ˆμ΄μ € 솑신기λ₯Ό μ„€μΉ˜ν•˜μ˜€λ‹€.

    2. λͺ¨λ“  νƒ‘μ˜ λ ˆμ΄μ € μ†‘μ‹ κΈ°λŠ” λ ˆμ΄μ € μ‹ ν˜Έλ₯Ό μ§€ν‘œλ©΄κ³Ό ν‰ν–‰ν•˜κ²Œ μˆ˜ν‰ μ§μ„ μ˜ μ™Όμͺ½ λ°©ν–₯으둜 λ°œμ‚¬ν•˜κ³ ,
      νƒ‘μ˜ κΈ°λ‘₯ λͺ¨λ‘μ—λŠ” λ ˆμ΄μ € μ‹ ν˜Έλ₯Ό μˆ˜μ‹ ν•˜λŠ” μž₯μΉ˜κ°€ μ„€μΉ˜λ˜μ–΄ μžˆλ‹€.
      ν•˜λ‚˜μ˜ νƒ‘μ—μ„œ λ°œμ‚¬λœ λ ˆμ΄μ € μ‹ ν˜ΈλŠ” κ°€μž₯ λ¨Όμ € λ§Œλ‚˜λŠ” 단 ν•˜λ‚˜μ˜ νƒ‘μ—μ„œλ§Œ μˆ˜μ‹ μ΄ κ°€λŠ₯ν•˜λ‹€.

    3. Nκ³Ό νƒ‘λ“€μ˜ 높이가 μ£Όμ–΄μ§ˆ λ•Œ, 각각의 νƒ‘μ—μ„œ λ°œμ‚¬ν•œ λ ˆμ΄μ € μ‹ ν˜Έλ₯Ό μ–΄λŠ νƒ‘μ—μ„œ μˆ˜μ‹ ν•˜λŠ”μ§€λ₯Ό μ•Œμ•„λ‚΄λŠ” 문제.

    4. N은 1 이상 500,000 μ΄ν•˜

    5. νƒ‘λ“€μ˜ λ†’μ΄λŠ” 1 이상 100,000,000 μ΄ν•˜μ˜ μ •μˆ˜

    6. λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ° μœ ν˜•μ˜ 문제

    πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

    from sys import stdin
    
    n = int(stdin.readline())
    data = list(map(int, stdin.readline().split()))
    stack = []
    ans = [0 for _ in range(n)]
    
    for i in range(n):
        while stack:
            if stack[-1][1] > data[i]:
                ans[i] = stack[-1][0] + 1
                break
    
            else:
                stack.pop()
    
        stack.append((i, data[i]))
    
    print(*ans)

    πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

    예제

    5
    6 9 5 7 4

    μ‹€ν–‰κ²°κ³Ό

    0 0 2 2 4

    ⌨️ 문제 풀이

    1. n의 길이의 dataλ₯Ό μ°¨λ‘€λŒ€λ‘œ μˆœνšŒν•œλ‹€.

    2. stack이 빌 λ•ŒκΉŒμ§€ while 문을 ν†΅ν•΄μ„œ λ°˜λ³΅ν•˜λ©°

    3. stack 맨 λ§ˆμ§€λ§‰ 탑이 ν˜„μž¬ κ²€μ‚¬ν•˜λŠ” 탑보닀 값이 크면 ν˜„μž¬ κ²€μ‚¬ν•˜λŠ” 탑은 μŠ€νƒ 맨 λ§ˆμ§€λ§‰ 탑이 μ‹ ν˜Έλ₯Ό λ°›κ³  μžˆλ‹€λŠ” 뜻.
      ans[i] 의 값을 stack의 [-1][0] μ—μ„œ 1을 더해 λ„£μ–΄μ£Όκ³  while λ°˜λ³΅λ¬Έμ„ 정지.

    4. (3)번의 쑰건에 ν•΄λ‹Ήν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ stack 맨 λ§ˆμ§€λ§‰ 값을 λΊ€λ‹€.

    5. while 문이 λλ‚˜λ©΄ stack에 (i, data[i])λ₯Ό λ„£μ–΄μ£Όκ³  λ‹€μ‹œ n 만큼 μˆœνšŒν•˜λŠ” λ°˜λ³΅λ¬Έμ„ 이어 μ§„ν–‰ν•œλ‹€.

    6. ans의 λ‚΄μš©μ„ 좜λ ₯ν•œλ‹€.

    πŸ’Ύ λŠλ‚€μ 

    1. μŠ€νƒμ„ μ‚¬μš©ν•˜μ—¬ ν‘ΈλŠ” 문제라고 생각을 ν•˜μ§€ λͺ»ν–ˆλ‹€.
    2. μ™œ μŠ€νƒμ„ ν•˜μš©ν•˜λŠ”μ§€ 디버깅 ν•˜κΈ° μ „κΉŒμ§€λŠ” 이해λ₯Ό λͺ»ν–ˆμ—ˆλ‹€.
    3. μŠ€νƒμ˜ μ‚¬μš© 방법이 더 λ§Žλ‹€λŠ” 것을 느꼈으며, μŠ€νƒμ— λŒ€ν•œ 문제λ₯Ό ν•œλ²ˆ 더 풀어봐야겠닀.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.