๐ฑ ๋ฌธ์
https://www.acmicpc.net/problem/5430
๐ฑ ํ์ด
1. ์ ๋ ฅ ๋ฐ๊ธฐ
T = int(input())
for _ in range(T):
p = input()
p.replace("RR", "")
p = list(p)
n = int(input())
array = deque(eval(input()))
- ํ
์คํธ ์ผ์ด์ค ๊ฐ์์ธ
T
๋ฅผ int๋ก ๋ฐ์์ ํด๋น ๊ฐ์๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋ค์ด๊ฐ๋๋ค. - ์ํํด์ผํ ํจ์
p
๋ ์ฐ์ string์ผ๋ก ๋ฐ์ต๋๋ค. ์ด๋,RR
์ ๋ค์ง๊ณ ๋ฐ๋ก ๋ค์ง๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ์๋ฌด๋ฐ ๋ณํ๋ฅผ ์ฃผ์ง ์์ผ๋ฏ๋กreplace()
ํจ์๋ก ๋ฐ๋ก ์ง์ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ string์ list๋ก ๋ฐ๊พธ์ด ์ดํ์ ๋ฐ๋ณต๋ฌธ์ ์ํํ๋ฉฐ ํจ์ ํ๋ํ๋๋ฅผ ํ์ํ ์ ์๋๋ก ํ์์ต๋๋ค. - ๊ฐ์ฅ ๊ณ ๋ฏผ์ด ๋์๋ ๋ถ๋ถ์ ๋ฐฐ์ด(
array
)์ ์ ๋ ฅ๋ฐ๋ ๋ถ๋ถ์ด์๋๋ฐ, ๋ฐฐ์ด์ด "1 2 3 4" ์ด๋ฐ์์ผ๋ก ์ ๋ ฅ๋๋ ๊ฒ์ด ์๋๋ผ "[1,2,3,4]" ์ด๋ ๊ฒ ๋ฆฌ์คํธ๋ก ๋ณด์ด๋ ๋ฌธ์์ด๋ก ์ ๋ ฅ๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ์ค์ ๋ฆฌ์คํธ ํํ๋ก ์ ๋ ฅ์ ๋ฐ์์ผ ํฉ๋๋ค. ์ฒ์์๋ `,`๋กsplit()
ํจ์๋ฅผ ์จ์ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ์์ง๋ง,eval()
ํจ์๋ก ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์์์ต๋๋ค.eval()
ํจ์๋ ํ์ด์ฌ์์ ๋ฌธ์์ด๋ก ํํ๋ ํํ์์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํจ์์ ๋๋ค. ๋ฐ๋ผ์ string์ผ๋ก ์ ๋ ฅ๋ฐ์ "[1,2,3,4]"๋ฅผ ๋ฆฌ์คํธ๋ก ํ๋จํ์ฌ ๋ฐ๋ก ๋ฆฌ์คํธ๋ก ํ๋จํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ๋ฑ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด์ผํ๊ธฐ ๋๋ฌธ์deque()
๋ก ๋ค์ ์๋ฃํ์ ๋ฐ๊พธ์ด์ฃผ์์ต๋๋ค.
2. ๋ฌด์กฐ๊ฑด error๊ฐ ์ถ๋ ฅ๋๋ ์ํฉ ๋จผ์ ํ๋จํ๊ธฐ
if p.count("D") > len(array):
print("error")
continue
D์ ๊ฐ์๊ฐ ๋ฐฐ์ด์ ์ ์ฒด ๊ธธ์ด๋ณด๋ค ๋ง๋ค๋ฉด ๋น์ฐํ error
๊ฐ ์ถ๋ ฅ๋์ผํ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ๋ฐ๋ณต๋ฌธ ๋ค์ด๊ฐ๊ธฐ ์ ์ ์ด ๊ฒฝ์ฐ๋ฅผ ๊ฒ์ฌํ๋ค. erorr
๋ผ๋ฉด continue
๋ก ์ดํ ๋ฐ๋ณต๋ฌธ์ ๋ค์ด๊ฐ์ง ์๋๋ก ํฉ๋๋ค.
3. ๋ฑ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๊ธฐ
์ผ๋จ ๋ถ๋๋ฝ์ง๋ง ๋์ ์ฝ์ง... ์ญ์๋ ์ด ๋ฌธ์ ๋ ๋นก์ ์๊ฐ ์ ํ์ ํด๊ฒฐํด์ผ ํ ์ ์๋ ๋ฌธ์ ์ ๋๋ค.
์ฐ์ ๋ก์ง์, ๋ฐฐ์ด์ ๋ค์ง์ด์ผํ ๋๋ง๋ค reverse()
ํจ์๋ array[::-1]
์ฒ๋ผ ์ฌ๋ผ์ด์ฑ์ผ๋ก ๋ค์ง๋๋ค๋ฉด ์ฐ์ฐ๋ง๋ค $O(N)$์ ์๊ฐ๋ณต์ก๋๋ก ์ฐ์ฐ์ด ๋๊ธฐ ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด ์๊ฐ์ด๊ณผ๊ฐ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐฉํฅ์ ์ ์ฅํ๊ณ ์๋ flag๋ฅผ ๋ง๋ค์ด์ ๋ค์ง์ ๋๋ง๋ค ๊ทธ flag์ ๊ฐ๋ง ๋ฐ๊พธ๊ณ ๋ค์ง๋ ์ฐ์ฐ์ ๋ง์ง๋ง์ ํ๋ฒ๋ง ์ํํ ์ ์๋๋ก ํฉ๋๋ค.
direction = 1
for f in p:
if f == 'R':
direction *= -1
elif f == 'D':
if len(array) == 0:
print("error")
break
if direction == 1:
array.popleft()
# array = array[1:]
else:
array.pop()
# array = array[:-1]
if direction == -1:
array.reverse()
- ๋ฐฉํฅ์ ์ ์ฅํ๋ flag์ด
direction
์ ์ฒ์์๋ 1๋ก ์ค์ ํฉ๋๋ค. - ์ํํด์ผ ํ ํจ์๋ค์ด ๋ด๊ฒจ์๋
p
์์ ํจ์๋ค์ ํ๋์ฉ ๊บผ๋ด๋ฉด์R
์ผ ๋๋ ๋ฐฉํฅ์ ๋ถํธ๋ง ๋ฐ๊พธ์ด์ค๋๋ค.D
์ผ ๋๋ ๋ฐฉํฅ์ ๋ณด๊ณ ์ ๋ฐฉํฅ์ผ ๋๋ ์์์ ๊บผ๋ด๊ณ (popleft()
), ์ญ๋ฐฉํฅ์ผ ๋๋ ๋ค์์ ๊บผ๋ ๋๋ค(pop()
). - ์ด๋, ์์๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์์ ์๊ฐ๋ณต์ก๋์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ๋ง์ฝ
array
๋ฅผ ๋ฆฌ์คํธ ์๋ฃํ์ผ๋ก ๋๊ณ ์ฌ๋ผ์ด์ฑ(list = list[1:]
)์ผ๋ก ์ ๊ฑฐํ๋ค๋ฉด ์๊ฐ๋ณต์ก๋๋ $O(N)$ ์ด์ง๋ง ๋ฑ(deque)์์popleft()
๋pop()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ์ ๊ฑฐํ๋ฉด ์๊ฐ๋ณต์ก๋๊ฐ $O(1)$ ์ ๋๋ค.
์๋ํ๋ฉด ๋ฆฌ์คํธ์์ ์ฌ๋ผ์ด์ฑ์ ํตํด ๋งจ ์ ์์๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ ์์๋ฅผ ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ ๋๋ค. ๋ฐ๋ฉด์ ๋ฑ์์ ๋งจ ์ ์์๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ๋งค์ฐ ํจ์จ์ ์ด๊ณ , ์์ ์๊ฐ์ ์ํ๋ฉ๋๋ค. - ํจ์๋ฅผ ๋ชจ๋ ์ํํ ๋ค์
direction
์ด -1์ด๋ผ๋ฉด ์ด๋ ๋ง์ง๋ง์ผ๋ก ํ๋ฒ๋งreverse()
์ฐ์ฐ์ ์ํํฉ๋๋ค.
4. ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(str(list(array)).replace(' ', ''))
๊ฒฐ๊ณผ ์ถ๋ ฅ ์, [1, 2, 3, 4]๊ฐ ์๋ blank์์ด [1,2,3,4]๋ก ์ถ๋ ฅ๋์ด์ผํ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ๋ฌธ์์ด ์ฒ๋ฆฌ๋ฅผ ํ ํ, ์ถ๋ ฅํฉ๋๋ค.
๐ฑ ์ ๋ต ์ฝ๋
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# boj 5430 AC
import sys
from collections import deque
input = sys.stdin.readline
T = int(input())
for _ in range(T):
p = input()
p.replace("RR", "")
p = list(p)
n = int(input())
array = deque(eval(input()))
if p.count("D") > len(array):
print("error")
continue
direction = 1
for f in p:
if f == 'R':
direction *= -1
elif f == 'D':
if len(array) == 0:
print("error")
break
if direction == 1:
array.popleft()
else:
array.pop()
if direction == -1:
array.reverse()
print(str(list(array)).replace(' ', ''))
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #2531 ํ์ ์ด๋ฐฅ (Python, Sliding window, ์๊ฐ์ด๊ณผ ํด๊ฒฐ) (1) | 2024.09.02 |
---|---|
[BOJ] #10830 ํ๋ ฌ ์ ๊ณฑ (Python, ๋ถํ ์ ๋ณต) (0) | 2024.08.03 |
[BOJ] #2437 ์ ์ธ (Python, Greedy) (0) | 2023.03.19 |
[BOJ] #11000 ๊ฐ์์ค ๋ฐฐ์ (Python, ์ฐ์ ์์ ํ, ๊ทธ๋ฆฌ๋) (2) | 2023.03.17 |
[BOJ] #16724 ํผ๋ฆฌ ๋ถ๋ ์ฌ๋์ด (0) | 2023.03.14 |
๋๊ธ