λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸƒ algorithm/boj

BOJ 4889 - μ•ˆμ •μ μΈ λ¬Έμžμ—΄

by HandHand 2021. 6. 7.

문제

λ°±μ€€ 온라인 저지 - 4889번

풀이 κ³Όμ •

μ—¬λŠ” κ΄„ν˜Έμ™€ λ‹«λŠ” κ΄„ν˜Έλ₯Ό 적절히 λ³€ν™˜ν•˜μ—¬ 짝이 λ§žλ„λ‘ ν•˜λŠ” 방법을 μ°ΎλŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

κ΄„ν˜Έ 짝 λ§žμΆ”κΈ° λ¬Έμ œμ™€ μœ μ‚¬ν•œ μ»¨μ…‰μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μš°μ„  μ—¬λŠ” κ΄„ν˜Έ({)의 경우 ν•΄λ‹Ή κ΄„ν˜Έκ°€ μ•ˆμ •μ μΈμ§€λŠ” 이 κ΄„ν˜Έλ§Œ λ΄μ„œλŠ” μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€. (이후에 λ‚˜μ˜€λŠ” κ΄„ν˜Έμ— 영ν–₯을 λ°›μŒ)

λŒ€μ‹ μ— λ‹«λŠ” κ΄„ν˜Έ(})의 경우 이전에 μ—¬λŠ” κ΄„ν˜Έκ°€ μ‘΄μž¬ν•΄μ•Όλ§Œ μ•ˆμ •μ μΈ λ¬Έμžμ—΄μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ λ‹«λŠ” κ΄„ν˜Έκ°€ λ‚˜μ™”λŠ”λ° μ—¬λŠ” κ΄„ν˜Έκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ„ 경우 μœ μΌν•œ 방법은 ν•΄λ‹Ή κ΄„νš¨λ₯Ό μ—¬λŠ” κ΄„ν˜Έλ‘œ λ°”κΎΈλŠ” 것 λΏμž…λ‹ˆλ‹€.

이룰 μœ„ν•΄ μŠ€νƒ 을 ν™œμš©ν•΄μ„œ κ΄„ν˜Έ μ’…λ₯˜μ— 따라 push, pop 을 μˆ˜ν–‰ν•˜κ³  μ΅œμ’…μ μœΌλ‘œ λ‚¨λŠ” μ—¬λŠ” κ΄„ν˜Έμ˜ 개수 / 2 κ°€ ν•„μš”ν•œ λ‹«λŠ” κ΄„ν˜Έμ˜ κ°œμˆ˜μž…λ‹ˆλ‹€.

μ½”λ“œ


import sys


def solution(string):
    change = 0
    stack = []

    for bracket in string:
        if bracket == '{':
            stack.append('{')
        else:
            if not stack:
                stack.append('{')
                change += 1
            elif stack[-1] == '{':
                stack.pop()

    change += len(stack) // 2

    return change


if __name__ == '__main__':
    question_number = 1

    while True:
        string = sys.stdin.readline().strip()
        if string[0] == '-':
            break

        answer = solution(string)
        print(f"{question_number}. {answer}")

        question_number += 1
λ°˜μ‘ν˜•

'πŸƒ algorithm > boj' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

BOJ 6118 - μˆ¨λ°”κΌ­μ§ˆ  (0) 2021.06.07
BOJ 2331 - λ°˜λ³΅μˆ˜μ—΄  (0) 2021.06.07
BOJ 4811 - μ•Œμ•½  (0) 2021.06.07
BOJ 5980 - Corn Maze  (0) 2021.06.07
BOJ 1240 - λ…Έλ“œμ‚¬μ΄μ˜ 거리  (0) 2021.06.07

πŸ’¬ λŒ“κΈ€