[BOJ][๐ก4][๋ฐฑ์ค#09935] ๋ฌธ์์ด ํญ๋ฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์๊ทผ์ด๋ ๋ฌธ์์ด์ ํญ๋ฐ ๋ฌธ์์ด์ ์ฌ์ด ๋์๋ค. ํญ๋ฐ ๋ฌธ์์ด์ด ํญ๋ฐํ๋ฉด ๊ทธ ๋ฌธ์๋ ๋ฌธ์์ด์์ ์ฌ๋ผ์ง๋ฉฐ, ๋จ์ ๋ฌธ์์ด์ ํฉ์ณ์ง๊ฒ ๋๋ค. ํญ๋ฐ์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์งํ๋๋ค.
๋ฌธ์์ด์ด ํญ๋ฐ ๋ฌธ์์ด์ ํฌํจํ๊ณ ์๋ ๊ฒฝ์ฐ์, ๋ชจ๋ ํญ๋ฐ ๋ฌธ์์ด์ด ํญ๋ฐํ๊ฒ ๋๋ค. ๋จ์ ๋ฌธ์์ด์ ์์๋๋ก ์ด์ด ๋ถ์ฌ ์๋ก์ด ๋ฌธ์์ด์ ๋ง๋ ๋ค. ์๋ก ์๊ธด ๋ฌธ์์ด์ ํญ๋ฐ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์์ ์๋ ์๋ค. ํญ๋ฐ์ ํญ๋ฐ ๋ฌธ์์ด์ด ๋ฌธ์์ด์ ์์ ๋๊น์ง ๊ณ์๋๋ค.
์๊ทผ์ด๋ ๋ชจ๋ ํญ๋ฐ์ด ๋๋ ํ์ ์ด๋ค ๋ฌธ์์ด์ด ๋จ๋์ง ๊ตฌํด๋ณด๋ ค๊ณ ํ๋ค. ๋จ์์๋ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋๋ โFRULAโ๋ฅผ ์ถ๋ ฅํ๋ค. ํญ๋ฐ ๋ฌธ์์ด์ ๊ฐ์ ๋ฌธ์๋ฅผ ๋ ๊ฐ ์ด์ ํฌํจํ์ง ์๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๋ฌธ์์ด์ ๊ธธ์ด๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ๋์งธ ์ค์ ํญ๋ฐ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๊ธธ์ด๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 36๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ๋ ๋ฌธ์์ด์ ๋ชจ๋ ์ํ๋ฒณ ์๋ฌธ์์ ๋๋ฌธ์, ์ซ์ 0, 1, โฆ, 9๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ชจ๋ ํญ๋ฐ์ด ๋๋ ํ ๋จ์ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
mirkovC4nizCC44
C4
์ถ๋ ฅ
mirkovniz
์์ 2
์ ๋ ฅ
12ab112ab2ab
12ab
์ถ๋ ฅ
FRULA
My Sol
import sys
input = sys.stdin.readline
def check(idx):
global part, pl
stack = stacks[idx]
if len(stack) != pl: return 0
for i in range(pl):
if not part[i] == stack[i]: return 0
return 1
txt = input().rstrip()
part = input().rstrip()
pl = len(part)
stacks = [[]]
ls = [0]
cur_stack_idx = 0
k = 0
for t in txt:
if t == part[k]:
stacks.append([t])
cur_stack_idx += 1
ls.append(1)
else:
stacks[cur_stack_idx].append(t)
ls[cur_stack_idx] += 1
# ํ์ฌ stack์ ๋ชจ์ธ ๋ฌธ์๊ฐ pl๊ณผ ๊ฐ์ ๋
if ls[cur_stack_idx] == pl:
while check(cur_stack_idx):
stacks.pop()
ls.pop()
cur_stack_idx -= 1
def is_empty(stacks):
for stack in stacks:
if stack: return 0
return 1
if is_empty(stacks):
print('FRULA')
quit()
for stack in stacks:
print(*stack, sep='', end='')
์คํ์ ์ด์ฉํด ํธ๋ ๋ฌธ์ ์๋ค.
- stack์ ๋ชจ์๋์ stacks ๋ฆฌ์คํธ ์์ฑ
- ํญ๋ฐ ๋ฌธ์์ด์ ์ฒซ ๋ฌธ์๋ฅผ ๋ฐ๊ฒฌํ ๋๋ง๋ค ์ stack์ ์ถ๊ฐ
- stack์ ๊ธธ์ด๊ฐ part์ ๊ธธ์ด์ ๊ฐ์์ง๋ฉด ๊ฐ์์ง ์ฒดํฌํ๋ ํจ์ ์คํ
- ๋ง์ฝ ๊ฐ๋ค๋ฉด stack์ stacks์์ ์ ๊ฑฐ
- ์๋ก์ด t๊ฐ ์ด์ stack์ ๊ณ์ ์ถ๊ฐ๋์ด pl๊ณผ ๊ฐ์์ง๋ฉด ๋ค์ check
- ์ด ๊ณผ์ ์ ๋ฐ๋ณต
- ๋จ์ stacks๋ฅผ ๊ณต๋ฐฑ ๊ฐ๊ฒฉ ์์ด ์ถ๋ ฅ
- ๋ง์ฝ stacks๊ฐ ๋น์ด์๋ค๋ฉด FRULA ์ถ๋ ฅ
๋ฆฌ์คํธ ๋ด๋ถ์ ๋น ๋ฆฌ์คํธ๊ฐ ํ๋ ์์ผ๋ฉด False๊ฐ ์๋ True์ธ ๊ฒ์ ์ฃผ์ํด์ผ ํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
์ฒ์์๋ list๋ฅผ ์ด์ฉํด ํญ๋ฐ ๋ฌธ์์ด์ ๋ฐ๊ฒฌํ๋ฉด ํญ๋ฐ ๋ฌธ์์ด์ ๊ธธ์ด๋งํผ popํ์ฌ ์ ๊ฑฐํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋๋ฐ, ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํด์ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๋ฅผ ์ฐธ๊ณ ํ์๋ค.
๋ชจ๋ฒ๋ต์
def main():
string = input() # ์ ์ฒด ๋ฌธ์์ด
bomb = input() # ํญ๋ฐ ๋ฌธ์์ด
lastChar = bomb[-1] # ํญ๋ฐ ๋ฌธ์์ด์ ๋ง์ง๋ง ๊ธ์
stack = []
length = len(bomb) # ํญ๋ฐ ๋ฌธ์์ด์ ๊ธธ์ด
for char in string:
stack.append(char)
if char == lastChar and ''.join(stack[-length:]) == bomb:
del stack[-length:]
answer = ''.join(stack)
if answer == '':
print("FRULA")
else:
print(answer)
๋ด ํ์ด์ ๋นํด ์ฝ๋๊ธธ์ด๋ ์ฝ 45%, ์ฐ์ฐ์๊ฐ์ ์ฝ 25% ์ ๋์ธ ํ์ด(์ถ์ฒ)๋ฅผ ๋ฐ๊ฒฌํด ๋ถ์ํด๋ณด๋ ค ํ๋ค.
์ด ๋ถ์ ์ ๊ทผ์ ๋ค์๊ณผ ๊ฐ๋ค.
-
์ ๋ ฅ๋ฌธ์์ด์ ์์์๋ถํฐ ์ฐจ๋ก์ฐจ๋ก ํ ๊ธ์์ฉ ์คํ์ push ํฉ๋๋ค.
-
ํ์ฌ ๊ธ์๊ฐ ํญ๋ฐ ๋ฌธ์์ด์ ๋ง์ง๋ง ๊ธ์์ ์ผ์นํ๋ฉด ์คํ์ top๋ถํฐ ํญ๋ฐ๋ฌธ์์ด์ ๊ธธ์ด๊น์ง ํ์ธํ์ฌ ํญ๋ฐ๋ฌธ์์ด์ด ๋ง๋ค์ด์ง๋์ง ํ์ธํฉ๋๋ค.
-
ํญ๋ฐ๋ฌธ์์ด์ด ๋ง๋ค์ด์ง๋ค๋ฉด ๋ง๋ค์ด์ง๋ ํญ๋ฐ๋ฌธ์์ด์ ์คํ์์ popํฉ๋๋ค.
-
1~3์ ๋ฐ๋ณตํฉ๋๋ค.
-
๋ฌธ์์ด ์ํ๋ฅผ ๋ง์น๊ณ ์คํ์ด ๋น์ด์์ผ๋ฉด, FRULA๋ฅผ ์ถ๋ ฅ, ๋น์ด์์ง ์๋ค๋ฉด ์คํ ์ ๋ฌธ์์ด์ ์ฐจ๋ก๋ก ์ถ๋ ฅํฉ๋๋ค.
๋ค์์๋ถํฐ ํ์ธํ๋ฉด ๋ ์ผ์ด์๋ค. ๊ต์ฅํ ๋๋ํ ํ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋์ฒ๋ผ ๋ค์ค stack์ ์ฌ์ฉํ์ง ์๊ณ ํ๋์ stack์ผ๋ก๋ง ํด๊ฒฐํ ๊ฒ์ด๋ ๋ง์ด๋ค. ์ด๋ ๊ฒ ๋๋ฉด stacks๊ฐ ๋น์ด์๋์ง ํ์ธํ๋ ํจ์ ์ญ์ ํ์๊ฐ ์๋ค.
๋ค๋ง answer์ ๋ต์ ๋ชจ์์ ์ถ๋ ฅํ๋๋ฐ, ๋๋ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์์ด ๋ฐ๋ก ์ถ๋ ฅํ๊ธฐ ์ํด is_empty ํจ์๋ฅผ ๋ง๋ค์๋ค. ์ด ๋ถ์ if stack: ์ผ๋ก FRULA๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋ ์ถ๋ ฅ ํ์์ ๋ฐ๋ผ ๋ฐ๋ก ์ถ๋ ฅํ ์ ์์๋๋ฐ ํด๋น ๋ถ๋ถ์ ์์ฝ๋ค. ๊ทธ๋ผ์๋ ์ ์ฒด์ ์ผ๋ก ๋๋ฌด๋ ํ๋ฅญํ ์ ๊ทผ๊ณผ ํ์ด์๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ