๋ฌธ์
๋ฐฑ์ค ๋จ๊ณ๋ณ ํ์ด - ์คํ, ํ, ๋ฑ
https://www.acmicpc.net/step/11
[28278]์คํ 2
๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/28278
์กฐ๊ฑด์ ์์๋๋ก ์ํํ๊ธฐ๋ง ํ๋ฉด ๋๋ ๋ฌธ์ ๋ค.
๋ฌผ ํ๋ฅด๋ฏ์ด ๋ฐ๋ผ๊ฐ๋ฉด ๋๋ ๋ฌธ์ ...์ง๋ง ์๋ชป ์ดํดํ ๋ถ๋ถ์ด ์์๋ค.
์กฐ๊ฑด 2๋ฒ์ ๋ณด๋ฉด, "๋งจ ์์ ์ ์๋ฅผ ๋นผ๊ณ ์ถ๋ ฅํ๋ค."๋ก ๋์ด์๋ค.
๋นผ๊ณ (except)๋ก ์ดํดํ๊ฑด๋ง ์๊ณ ๋ณด๋ ๋นผ๊ณ (pop)์๋ค.
๋จ๊ณ๋ณ ํ์ด
from sys import stdin
input = stdin.readline
N = int(input())
stack = []
- ์ฐ์
input์stdin.readlineํจ์๋ก ์ ์ธํด์ค๋ค. - ๋ช
๋ น์ ์
N์ ๊ฐ์ ๋ฐ์ ์ ์ํ์ผ๋ก ๋ณํ. - ์คํ์ผ๋ก ์ฌ์ฉํ ๋ฆฌ์คํธ
stack์์ฑ.
for _ in range(N):
command, *num = input().split()
- ๋ช ๋ น์ ์๋งํผ for๋ฌธ์ ๋ฐ๋ณตํ๋ค.
- ๋ช
๋ น์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๊ฐ์ ์ ์๋ก ์ฃผ์ด์ง์ง๋ง, ๋ช
๋ น 1๋ฒ๊ฐ์๊ฒฝ์ฐ
๋ช ๋ น ์ ์์ ํํ๋ก ์ฃผ์ด์ง๋ค.- ๋๋ ์ธํจํน(
*)์ ์ฌ์ฉํด*num์ผ๋ก ํ ๋นํด์คฌ๋ค. ์ด๋ ๊ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ 1๋ฒ์ ์ ์ธํ ๋ช ๋ น๋ ์๋ฌ ์์ด ๋์ํ๋ค.num์ผ๋ก ํ ๋นํ ๋งํ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ง์ง ์์ผ๋ฉด ์์์ ๋น ๋ฆฌ์คํธ๊ฐ ํ ๋น๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋๋ ์ธํจํน(
if command == "1":
stack.append(int(num[0]))
elif command == "2":
if stack:
print(stack.pop())
else:
print(-1)
elif command == "3":
print(len(stack))
elif command == "4":
print(int(not stack))
else:
if stack:
print(stack[-1])
else:
print(-1)
- ๊ทธ ๋ค์์ ์กฐ๊ฑด๋๋ก ์์ฑํด์ฃผ๋ฉด ๋๋ค.
num์ ๋ฆฌ์คํธ์ ํํ๋ก ์กด์ฌํ๋ฏ๋ก ๋ฐ๋ก ๋ฝ์์ค์ผํ๋ค.
์ ์ฒด ์ฝ๋
# ์คํ, ํ, ๋ฑ
# ๋ฉ๋ชจ๋ฆฌ: 71112KB / ์๊ฐ: 1040ms
# 2๋ฒ ๋งจ ์์ ์ ์๋ฅผ ๋นผ๊ณ ์ถ๋ ฅํ๋ค => ๋งจ ์์ ์ ์๋ฅผ "๋นผ๊ณ ", ๊ทธ ์๋ฅผ "์ถ๋ ฅํ๋ค."
from sys import stdin
input = stdin.readline
N = int(input())
stack = []
for _ in range(N):
command, *num = input().split()
if command == "1":
stack.append(int(num[0]))
elif command == "2":
if stack:
print(stack.pop())
else:
print(-1)
elif command == "3":
print(len(stack))
elif command == "4":
print(int(not stack))
else:
if stack:
print(stack[-1])
else:
print(-1)
[10773]์ ๋ก
๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/10773
์ฃผ์ด์ง ์๋ค์ ์ด ํฉ์ ๊ตฌํ๋ ๋ฌธ์ ๋ค.
๋์ค์ ์ฌ๋ฏผ์ด๋
์์ด 0์ ์ธ์น๋ฉด, ๊ทธ ์ง์ ์ ์๋ฅผ ์ง์์ฃผ๋ฉด ๋๋ค.
์ฐธ๊ณ ๋ก 0 ์ง์ ์ ์๋ ๋ฌด์กฐ๊ฑด ์กด์ฌํ๋ค.
๊ฐ๋จํ ๋ฌธ์ ์ด๋ฏ๋ก ์ ์ฒด ์ฝ๋๋ก ์ถฉ๋ถํ๋ค.
์ ์ฒด ์ฝ๋
# ์คํ, ํ, ๋ฑ
# ๋ฉ๋ชจ๋ฆฌ: 31900KB / ์๊ฐ: 116ms
# ์ ์๊ฐ 0์ผ ๊ฒฝ์ฐ์ ์ง์ธ ์ ์๋ ์๊ฐ ์์์ ๋ณด์ฅ.
from sys import stdin
input = stdin.readline
K = int(input())
stack = []
for _ in range(K):
num = int(input())
if not num:
stack.pop()
continue
stack.append(num)
print(sum(stack))
- ์
๋ ฅ๋ ์ ์์ ๊ฐฏ์
K๋งํผ ์๋์ for๋ฌธ์ ๋ฐ๋ณต. - ๊ฐ ์ ์๋
int๋ก ๋ณํ ํnum์ผ๋ก ํ ๋นํด์ค๋ค.- ๋ง์ฝ
num์ด ์๋ ๊ฒฝ์ฐ(=num == 0์ผ ๊ฒฝ์ฐ), ์ง์ ์ ์๋ฅผpop()ํ ๋ค ๋ค์ ๋ฐ๋ณต์ผ๋ก ๋๊ธด๋ค. - ๊ทธ๊ฒ ์๋๋ผ๋ฉด
stack์ ๊ทธ๋๋ก ๋ํด์ค๋ค.
- ๋ง์ฝ
- ๋ฐ๋ณต์ด ๋๋๋ฉด
stack์ ์ด ํฉ์ ์ถ๋ ฅ.
[9012]๊ดํธ
๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/9012
๊ฐ ์ค์ ๋ฌธ์์ด์ ๋ ๊ฐ์ ๊ดํธ "(", ")" ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
์ง์ด ์๋ง๋๋ค๋ฉด NO ๋ฅผ, ๋ง๋ค๋ฉด YES ๋ฅผ ์ถ๋ ฅํด์ค์ผํ๋ค.
๋จ๊ณ๋ณ ํ์ด
from sys import stdin
input = stdin.readline
T = int(input())
inputํจ์๋ฅผ ์ฌ์ ์- ์
๋ ฅ๋ ์ค์ ๊ฐฏ์๋ฅผ
T๋ก ํ ๋น.
def check_ps(string) -> bool:
stack = []
for s in string:
if s == "(":
stack.append(s)
else:
if not stack:
return False
stack.pop()
return bool(not stack)
- ํด๋น ๋ฌธ์์ด
string์ด ๊ดํธ์ง์ด ๋ง๋์ง ์๋์ง ์ฒดํฌํด์ค ํจ์check_ps๋ฅผ ๋ง๋ค์ด์ค๋ค. ๊ฐ ์ค๋ง๋ค ์ฒดํฌํด์ผํ๋ฏ๋ก ๋ฐ๋ก ํจ์๋ก ๋นผ์คฌ๋ค. - ๋จผ์ ๋น ๋ฆฌ์คํธ
stack์ ์ ์ธํ ๋ค for๋ฌธ์ ํตํดstring์ ์ํํ๋ค.- ๋ง์ฝ
s๊ฐ ์ฌ๋ ๊ดํธ(๋ผ๋ฉด ๊ทธ๋๋กstack์ ์ถ๊ฐํ๋ค. - ๋ซ๋ ๊ดํธ
)์ผ ๊ฒฝ์ฐ, ๋จผ์ stack์ด ๋น์ด์๋์ง ์ฒดํฌํด์ผํ๋ค. ๋น์ด์๋์ํ์์pop()์ ์คํํ๋ฉด ์๋ฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค.- ๋ง์ฝ ๋น์ด์๋ค๋ฉด ๊ทธ๋๋ก
False๋ฅผ ๋ฐํํด์ฃผ๊ณ , - ์๋๋ผ๋ฉด
pop()์ ์คํํ๋ค. ์ฌ๋ ๊ดํธ ํ๊ฐ๋ฅผ ์ ๊ฑฐํด์ค์ผ๋ก์จ ์ง์ ๋ง์ถฐ์ฃผ๋๊ฑฐ๋ค.
- ๋ง์ฝ ๋น์ด์๋ค๋ฉด ๊ทธ๋๋ก
- ๋ง์ฝ
- for๋ฌธ ์ํ๊ฐ ๋๋๊ณ ๋
stack์ด ๋จ์์๋ค๋ฉดFalse, ๋น์ด์์ผ๋ฉด ์ง์ด ๋ง๋ค๋ ์๋ฆฌ์ด๋ฏ๋กTrue๋ฅผ ๋ฐํํด์ค๋ค.
for _ in range(T):
ps = input().strip() # stdin๋ก ๊ทธ๋ฅ input๊ฐ์ ๋ฐ์์ฌ๋ strip()์ ๊ผญ ์จ์ฃผ์.
print("YES" if check_ps(ps) else "NO")
- ์ด์
T๋งํผcheck_ps(์ ๋ ฅ๊ฐ)์ ๋ฐ๋ณตํด์ค๋ค. - ๋ง์ฝ ํจ์์ ๋ฐํ๊ฐ์ด
True๋ผ๋ฉด "YES",False๋ผ๋ฉด "NO"๋ฅผ ๋ฐํํ๋ค.
๐จ ์ผ๋ฐ์ ์ธ input()์ ๊ฒฝ์ฐ, ๊ฐํ๋ฌธ์(\n)๋ฅผ ์ ๊ฑฐํ ์
๋ ฅ๊ฐ์ ๋ฐํํด์ค๋ค.
ํ์ง๋ง ํ์ฌ input์ stdin.readline์ผ๋ก ํ ๋นํด๋์ ์ํ๋ค.readline()๊ฐ์ ๊ฒฝ์ฐ ๊ฐํ๋ฌธ์๊น์ง ํฌํจํ ๊ฐ์ ๋ฐํํด์ฃผ๋ฏ๋ก, strip()์ด๋ rstrip()์ ํตํด ๋ฐ๋ก ์ ๊ฑฐํด์ฃผ์ด์ผํ๋ค.
์ ์ฒด ์ฝ๋
# ์คํ, ํ, ๋ฑ
# ๋ฉ๋ชจ๋ฆฌ: 31120KB / ์๊ฐ: 44ms
from sys import stdin
input = stdin.readline
T = int(input())
def check_ps(string) -> bool:
stack = []
for s in string:
if s == "(":
stack.append(s)
else:
if not stack:
return False
stack.pop()
return bool(not stack)
for _ in range(T):
ps = input().strip() # stdin๋ก ๊ทธ๋ฅ input๊ฐ์ ๋ฐ์์ฌ๋ strip()์ ๊ผญ ์จ์ฃผ์.
print("YES" if check_ps(ps) else "NO")
[4949]๊ท ํ์กํ ์ธ์
๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/4949
๊ฐ ๋ฌธ์์ด์ ๋ง์ง๋ง ๊ธ์๋ฅผ ์ ์ธํ๊ณ ์๋ฌธ ์ํ๋ฒณ, ๊ณต๋ฐฑ, ์๊ดํธ("( )"), ๋๊ดํธ("[ ]")๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์จ์ (".")์ผ๋ก ๋๋๊ณ , ๊ธธ์ด๋ 100๊ธ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
์ ๋ ฅ์ ์ข ๋ฃ์กฐ๊ฑด์ผ๋ก ๋งจ ๋ง์ง๋ง์ ์จ์ ํ๋(".")๊ฐ ๋ค์ด์จ๋ค.
์ฆ (๊ณต๋ฐฑ).๋ True๋ก ์ทจ๊ธ๋๋ค.
๋จ๊ณ๋ณ ํ์ด
from sys import stdin
input = stdin.readline
brackets = {"(": ")", "[": "]"}
inputํจ์ ์ฌ์ ์.- ๊ดํธ๋ค์ ๋์
๋๋ฆฌ
brackets์ ์ ์ฅํ๋ค. ์ฌ๋๊ดํธ๋ฅผ key, ๋ซ๋๊ดํธ๋ฅผ value๋ก ์ง์ ํด์คฌ๋ค.
def check_balanced(string) -> bool:
stack = []
for s in string:
if s in brackets:
stack.append(s)
elif s in brackets.values():
if not stack:
return False
p = stack.pop()
if brackets[p] != s:
return False
return bool(not stack)
- ๊ดํธ์ง์ด ๋ง๋์ง ์๋์ง ์ฒดํฌํด์ค ํจ์
check_balanced๋ฅผ ์์ฑํด์ค๋ค. - ํจ์ ํธ์ถ ์ ์คํ
stack์ ์์ฑํ ๋ค, ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ดstring์ ๋ํด์ ์ํ๋ฅผ ์์ํ๋ค.- ๋ง์ฝ
s๊ฐbrackets์ key๊ฐ์ ์กด์ฌํ๋ค๋ฉด(์ฌ๋๊ดํธ๋ผ๋ฉด),stack์ ์ถ๊ฐํ๋ค. - ํ์ง๋ง
brackets์ value๊ฐ๋ค์ ์กด์ฌํ ๊ฒฝ์ฐ(๋ซ๋๊ดํธ),stack์ด ๋น์ด์๋ค๋ฉด ๋ฐ๋กFalse๋ฅผ ๋ฐํํด์ค๋ค.- ์๋๋ผ๋ฉด
stack์pop()ํ ๊ฐ(์ฌ๋๊ดํธ)์brackets์ ๋ฃ์ด ๋น๊ตํด๋ณธ๋ค.
๋ง์ฝ ํ์ฌ ๋ฌธ์์ดs๊ฐp์ value๊ฐ๊ณผ ๊ฐ์ง ์๋ค๋ฉด ๊ดํธ์ง์ด ๋ง์ง ์๋ค๋ ์๋ฆฌ์ด๋ฏ๋กFalse๋ฅผ ๋ฐํํด์ค๋ค.
- ๋ง์ฝ
- ๋ชจ๋ ์ํ๋ฅผ ๋ง์น๊ณ ๋
stack์ด ๋จ์์๋ค๋ฉดFalse, ๋น์ด์๋ค๋ฉดTrue๋ฅผ ๋ฐํํ๋ค.
while True:
sentence = input().rstrip()
if sentence == ".":
break
print("yes" if check_balanced(sentence) else "no")
- ์์
check_balanced()ํจ์๋ฅผ while๋ฌธ์ ํตํด ๋ฐ๋ณต ์คํํ๋ค.
๐จ ์ฐธ๊ณ ๋ก ์
๋ ฅ๊ฐ.rstrip()์ ํด์ค์ผ ๊ฐํ๋ฌธ์ ์์ด ์จ์ ํ ๋ฌธ์์ด๋ก ์ ์ฅ๋๋ค.
(ํด๋น ๋ฌธ์ ์์๋ ๊ทธ๋ฅ ๊ณต๋ฐฑ+์จ์ ๋ ์
๋ ฅ๊ฐ์ผ๋ก ์ฃผ์ด์ง๋ฏ๋ก, strip()์ ์ฌ์ฉ X. ์์ชฝ ๊ณต๋ฐฑ์ด ์ง์์ง๋ฏ๋ก ์
๋ ฅ ๋๊ฐ(.)์ผ๋ก ์ธ์ํด๋ฒ๋ฆฐ๋ค.)
- ๊ณต๋ฐฑ, ๋ค๋ฅธ ๋ฌธ์ ์์ด ์จ์ ๋ง ์
๋ ฅ๋ ๊ฒฝ์ฐ ์
๋ ฅ ๋์ด๋ผ๋ ์๋ฆฌ์ด๋ฏ๋ก
break.
๊ทธ ์ ๊น์ง๋check_balanced(์ ๋ ฅ๊ฐ.rstrip())์ ์คํํ๋ค. - ๋ฐํ๊ฐ์ด ์ฐธ์ด๋ผ๋ฉด "yes", ๊ฑฐ์ง์ด๋ผ๋ฉด "no"๋ฅผ ์ถ๋ ฅ.
์ ์ฒด ์ฝ๋
์ฒซ๋ฒ์งธ ์ฝ๋
# ์คํ, ํ, ๋ฑ
# ๋ฉ๋ชจ๋ฆฌ: 31120KB / ์๊ฐ: 72ms
from sys import stdin
input = stdin.readline
brackets = {"(": ")", "[": "]"}
def check_balanced(string) -> bool:
stack = []
for s in string:
if s in brackets:
stack.append(s)
elif s in brackets.values():
if not stack:
return False
p = stack.pop()
if brackets[p] != s:
return False
return bool(not stack)
while True:
sentence = input().rstrip()
if sentence == ".":
break
print("yes" if check_balanced(sentence) else "no")
๋๋ฒ์งธ ์ฝ๋(์๊ฐ์ด ์ข ๋ ๋จ์ถ๋จ)
# ์๊ฐ: 60ms
from sys import stdin
brackets = {")": "(", "]": "["}
def is_balanced(s):
stack = []
for char in s:
if char in "([":
stack.append(char)
elif char in ")]":
if not stack or stack.pop() != brackets[char]:
return False
return not stack
for line in stdin:
line = line.rstrip()
if line.rstrip() == ".":
break
print("yes" if is_balanced(line) else "no")
[12789]๋ํค๋ํค ๊ฐ์๋๋ฆฌ๋ฏธ
๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/12789
์
๋ ฅ๊ฐ์ผ๋ก ์ ์ N, ๊ทธ๋ฆฌ๊ณ 1๋ถํฐ N๊น์ง์ ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค.
์คํ์ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์์ด์ด 1,2,3...N ์ด ๋ ์ ์๋์ง ์ฒดํฌํ๋ ๋ฌธ์ .
๋จ๊ณ๋ณ ํ์ด
from sys import stdin
input = stdin.readline
N = int(input())
students = list(map(int, input().split()))
stack = []
order = 1
- ๋จผ์
input์ฌ์ ์. students= ์ ๋ ฅ๊ฐ๋ค์intํ์ผ๋ก ๋ณํํ ๋ฆฌ์คํธ.- ์คํ์ผ๋ก ์ฌ์ฉํ ๋น ๋ฆฌ์คํธ
stack์์ฑ. - 1๋ฒ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฐฐ์ ๋ฐ์์ผํ๋
order = 1๋ก ํ์ฌ ์๋ฒ์ ์ ์ํด์ค๋ค.
for student in students:
if student == order:
order += 1
while stack and stack[-1] == order:
stack.pop()
order += 1
else:
stack.append(student)
- ์
๋ ฅ๋ฐ์ ์ ์ํ ๋ฆฌ์คํธ
students๋ฅผ ํ๋์ฉ ์ํํ๋ค.- ๋ง์ฝ ํ์ฌ ์๋ฒ(
order)์ ํ์ฌ ํ์์ ์๋ฒ์ด ์ผ์นํ๋ค๋ฉด,order์ 1 ์ฆ๊ฐ์์ผ์ค๋ค. - ๊ทธ๋ฆฌ๊ณ
stack์ด ์กด์ฌ,stack์ ๋ง์ง๋ง๊ฐ์ด ํ์ฌ ์๋ฒ๊ณผ ์ผ์นํ๋๋์pop()์ผ๋ก ๊บผ๋ธ ํorder์ 1 ์ฆ๊ฐ์ํจ๋ค.
- ๋ง์ฝ ํ์ฌ ์๋ฒ(
โ ์์ ๋ฐ์ดํฐ 5 4 1 3 2๋ฅผ ์๋ก ๋ค์ด๋ณด์.
- ํ์์ ์๋ฒ
5!= ํ์ฌ ์๋ฒ1=>stack.append(5) - ํ์์ ์๋ฒ
4!= ํ์ฌ ์๋ฒ1=>stack.append(4) - ํ์์ ์๋ฒ
1== ํ์ฌ ์๋ฒ1=>order += 1=> ํ์ฌ ์๋ฒ2
=>stack[-1](=4)!= ํ์ฌ ์๋ฒ2=> while๋ฌธ ์ง์ X - ํ์์ ์๋ฒ
3!= ํ์ฌ ์๋ฒ2=>stack.append(3) - ํ์์ ์๋ฒ
2== ํ์ฌ ์๋ฒ2=>order += 1=> ํ์ฌ ์๋ฒ3
=>stack[-1](=3)== ํ์ฌ ์๋ฒ3=>stack.pop,order += 1=> ํ์ฌ ์๋ฒ4
=>stack[-1](=4)== ํ์ฌ ์๋ฒ4=>stack.pop,order += 1=> ํ์ฌ ์๋ฒ5
=>stack[-1](=5)== ํ์ฌ ์๋ฒ5=>stack.pop,order += 1=> ํ์ฌ ์๋ฒ6
=>stack์ด ๋น์์ผ๋ฏ๋ก while๋ฌธ ํ์ถ
=> for๋ฌธ ์ํ ์๋ฃ
print("Nice" if not stack else "Sad")
- for๋ฌธ ์ํ ํ
stack์ด ๋น์ด์๋ค๋ฉด "Nice", ๋จ์์๋ค๋ฉด "Sad"๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ "Nice"๊ฐ ์ถ๋ ฅ๋๊ฒ ๋ค.
์ ์ฒด ์ฝ๋
# ์๊ฐ: 32ms
from sys import stdin
input = stdin.readline
N = int(input())
students = list(map(int, input().split()))
stack = []
order = 1
for student in students:
if student == order:
order += 1
while stack and stack[-1] == order:
stack.pop()
order += 1
else:
stack.append(student)
print("Nice" if not stack else "Sad")