BOJ/๐Ÿฅˆ

โ˜…Stack & Queue & Deque Intermediate II - 3 Solvedโ˜…

metamong 2024. 5. 26.

โ˜… 25497 ๊ธฐ์ˆ  ์—ฐ๊ณ„๋งˆ์Šคํ„ฐ ์ž„์Šค โ˜…

import sys
input=sys.stdin.readline

N=int(input())
string=input().rstrip()
l,r,s,k,ans=0,0,0,0,0
for i in range(N):
    if string[i] in '123456789':
        ans+=1
    else:
        if string[i] == 'L':
            l+=1
        elif string[i] == 'R':
            if l==0:
                print(ans)
                sys.exit()
            else:
                l-=1
                ans+=1
        elif string[i] == 'S':
            s+=1
        else: #'K'
            if s==0:
                print(ans)
                sys.exit()
            else:
                s-=1
                ans+=1
print(ans)

 

๐ŸŒฟ ์ˆซ์ž๋Š” ๊ทธ๋Œ€๋กœ ์นด์šดํŠธ, ๋‹ค๋งŒ L ๋‹ค์Œ์— R, S ๋‹ค์Œ์— K๊ฐ€ ์˜ค๊ฒŒ ์ˆœ์„œ๋ฅผ ๋งž์ถ”์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ๋งŒ ์ฃผ์˜. ์ˆœ์„œ๊ฐ€ ๊ผฌ์ด๋ฉด ๋ฐ”๋กœ ans ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒ. L ๋“ฑ์žฅํ•  ๋•Œ ๋งˆ๋‹ค L ๊ฐœ์ˆ˜ += 1 ํ•˜๋ฉด์„œ R ๋‚˜์™”์„ ๋•Œ L -=1 ์†Œ๋ชจํ•˜๊ณ  ans += 1. ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด์˜ค๊ณ  ๋“ค์–ด์˜จ ์ˆœ์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ๋™์ผ. ๋ฐฉ์‹๋งŒ ๋™์ผํ•  ๋ฟ ์Šคํƒ ๋งŒ๋“ค ํ•„์š” ์—†์ด ๊ทธ ๋•Œ ๊ทธ ๋•Œ ์ฒ˜๋ฆฌํ•ด์ค˜๋„ ๊ฐ€๋Šฅ.


โ˜… 7585 Brackets โ˜…

import sys
input=sys.stdin.readline
#check ()[](
while 1:
    s = input().rstrip()
    if s == '#': break
    stack=[]
    is_legal=True
    for x in s:
        if x in '([{':
            stack.append(x)
        elif x == ')':
            if stack:
                if stack[-1] == '(': stack.pop()
                else:
                    is_legal=False
                    break
            else:
                is_legal=False
                break
        elif x == ']':
            if stack:
                if stack[-1] == '[': stack.pop()
                else:
                    is_legal=False
                    break
            else:
                is_legal=False
                break
        elif x == '}':
            if stack:
                if stack[-1] == '{': stack.pop()
                else:
                    is_legal=False
                    break
            else:
                is_legal=False
                break
    print('Legal' if is_legal and not stack else 'Illegal')

 

๐ŸŒฟ () {} [] ์Œ์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์ž˜ ๋˜์–ด ์žˆ๋Š” ์ง€ ํ™•์ธ. stack ๋งŒ๋“ค๊ณ  ํ•ด๋‹น opened parenteses๋ผ๋ฉด ๋ฐ”๋กœ append, closed parentheses๋ผ๋ฉด stack[-1]๊ณผ ๋น„๊ต. ์Œ์ด ๋‹ค๋ฅด๋‹ค๋ฉด ๋ฐ”๋กœ Illegal, ๊ฐ™๋‹ค๋ฉด stack.pop() / stack์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋ฉด Illegal

๐ŸŒฟ flag ๋ณ€์ˆ˜ ์ ์ ˆํžˆ ํ™œ์šฉ


โ˜… 31395 ์ •๋ ฌ๋œ ์—ฐ์†ํ•œ ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ฐœ์ˆ˜ โ˜…

import sys
input=sys.stdin.readline
N=int(input())
ns=list(map(int,input().split()))
stack=[]
ans=0
for n in ns:
    if not stack:
        stack.append(n)
        ans+=1
    else:
        if stack[-1]<n:
            ans+=(len(stack)+1)
            stack.append(n)
        else:
            stack.clear()
            stack.append(n)
            ans+=1
print(ans)

 

๐ŸŒฟ ์Šคํƒ ๊ด€์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ์ผ๋‹จ list์™ผ์ชฝ๋ถ€ํ„ฐ ๋Œ๋ฉด์„œ ๋„ฃ๊ณ ์ž ํ•˜๋Š” ์ˆซ์ž๋ฅผ x๋ผ ํ•˜์ž. stack์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด xํ•˜๋‚˜ ์นด์šดํŠธ ๋˜๋ฏ€๋กœ ans+=1 / ์ด๋ฏธ stack์— ์กด์žฌํ•œ๋‹ค๋ฉด, (1) stack ๋งจ ๋์˜ ์›์†Œ์™€ x ๋น„๊ต: ์˜ˆ๋ฅผ ๋“ค์–ด x๊ฐ€ 5์ด๊ณ  1 2 3์ด stack์— ๋“ค์–ด์žˆ์„ ๋•Œ stack[-1]<x์ด๋ฉด x๋ฅผ ํฌํ•จํ•ด์„œ ์ฆ๊ฐ€์ˆ˜์—ด์„ ์ด x ์ž์‹  ํฌํ•จ 4๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค([1 2 3 5] [2 3 5] [3 5] [5]). ์—ฐ์†ํ•œ ๋ถ€๋ถ„ ์ˆ˜์—ด๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ len(stack) + 1๋งŒํผ์˜ ์ƒˆ๋กœ์šด ์ˆ˜์—ด ๊ฐœ์ˆ˜๊ฐ€ ์ถ”๊ฐ€. (2) stack[-1]>=x๋ผ๋ฉด x๋ฅผ ๋ ์›์†Œ๋กœ ์‚ฌ์šฉํ•ด์„œ ์—ฐ์†ํ•œ ๋ถ€๋ถ„์ฆ๊ฐ€์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, stack์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ณ  x ์ž์‹ ์„ ๋„ฃ๋Š”๋‹ค. ans += 1


 

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€