๐Ÿงฉ Algorithm/[Programmers] Level 2

[Programmers] L2. ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ (์Šคํƒ/ํ/Python)

devCloud 2024. 11. 8. 15:42
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ’€์ด ๋ฐฉ๋ฒ•

1๏ธโƒฃ ")" ๋ฅผ ๋งŒ๋‚  ๋•Œ ๊นŒ์ง€ "(" ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.

queue.append(n)

 

2๏ธโƒฃ ")" ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ์˜ ๋งจ ๋’ค์—์„œ๋ถ€ํ„ฐ "(" ๋ฅผ ๊บผ๋‚ธ๋‹ค.

  • ๋‹จ, "(" ๋ฅผ ๊บผ๋‚ด๊ธฐ ์ „์— ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•œ๋‹ค. ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ๊บผ๋‚ด๋ ค๊ณ  ํ•  ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
  • ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ๊บผ๋‚ด๊ณ  ๋น„์–ด์žˆ์œผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ์ค‘๋‹จ์‹œํ‚จ๋‹ค.
    • ์ฒ˜์Œ๋ถ€ํ„ฐ ")" ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ฌธ์ž์—ด์„ ๋๊นŒ์ง€ ํ™•์ธํ•ด๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง์ง€์–ด์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 
queue.pop()

 

3๏ธโƒฃ ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋น„์–ด์žˆ์œผ๋ฉด True๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

โ˜… True ์˜ˆ์‹œ

ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฏ€๋กœ True ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

โ˜… False ์˜ˆ์‹œ

ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ False ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

Solution

from collections import deque

def solution(s):
    answer = True
    queue = deque()  # ๋น„์–ด์žˆ๋Š” ํ ์ƒ์„ฑ
    for i in s:
        if i == "(":
            queue.append(i)  # ๋’ค์—์„œ๋ถ€ํ„ฐ ๋„ฃ๊ธฐ
        else:
            if len(queue) != 0:  # ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด
                queue.pop()  # ๋งจ ๋’ค์—์„œ๋ถ€ํ„ฐ ๊บผ๋‚ด๊ธฐ
            else:  # ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด
                queue.append(i)
                break

    if len(queue) > 0:  # ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง์ง€์–ด์ง€์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ
        answer = False

    return answer

 

 

๊ฐœ์„ ํ•  ์ 

  • ์ด ์ฝ”๋“œ์—์„œ ํ(deque)๋ฅผ ์‚ฌ์šฉํ•ด ๊ด„ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง์ง€์–ด์กŒ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์€ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ, ํ ๋Œ€์‹  list๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๊ฐ„๋‹จํ•˜๋‹ค.
  • deque์˜ ์žฅ์ ์ธ ์–‘๋ฐฉํ–ฅ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, list๋กœ๋„ ์ถฉ๋ถ„ํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋˜ํ•œ, ์ฝ”๋“œ์—์„œ answer ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ True๋กœ ์ •์˜ํ•˜๋Š” ๋Œ€์‹ , ๋งˆ์ง€๋ง‰์— ์กฐ๊ฑด์„ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๊ฐœ์„ ํ•˜๋ฉด ๊ธธ์ด๊ฐ€ 100,000๊นŒ์ง€ ๋˜๋Š” s ๋ฌธ์ž์—ด๋„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐœ์„ ๋œ ์ฝ”๋“œ

def solution(s):
    stack = []
    for char in s:
        if char == "(":
            stack.append(char)  # ์—ด๋ฆฐ ๊ด„ํ˜ธ๋Š” ์Šคํƒ์— ์ถ”๊ฐ€
        else:
            if stack:  # ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด
                stack.pop()  # ์Šคํƒ์—์„œ ์—ด๋ฆฐ ๊ด„ํ˜ธ ํ•˜๋‚˜ ์ œ๊ฑฐ
            else:
                return False  # ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋” ๋งŽ์•„์ง€๋Š” ๊ฒฝ์šฐ False ๋ฐ˜ํ™˜

    return len(stack) == 0  # ์Šคํƒ์ด ๋น„์–ด์žˆ์–ด์•ผ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ

 


 

728x90