Skip to content

Commit 4aa7e8f

Browse files
authored
Merge pull request #43 from 24-Algorithm/minjeong
Minjeong / 7์›” 3์ฃผ์ฐจ / 3๋ฌธ์ œ
2 parents 13ad0dc + af7bddc commit 4aa7e8f

4 files changed

+145
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import sys
2+
from collections import deque
3+
sys.setrecursionlimit(10**5) # ์ตœ๋Œ€ ์žฌ๊ท€ํ•œ๋„ ๊นŠ์ด
4+
input = sys.stdin.readline
5+
6+
# dfs ํ•จ์ˆ˜ ์ •์˜
7+
def dfs(start):
8+
print(start, end=' ') # ํ•ด๋‹น ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
9+
dfs_visited[start] = 1 # ํ•ด๋‹น ๊ฐ’์„ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•œ๋‹ค.
10+
for u in sorted(graph[start]): # ํ•ด๋‹น ๊ฐ’๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์žฌ๊ท€ ํƒ์ƒ‰ํ•œ๋‹ค.
11+
if not dfs_visited[u]:
12+
dfs(u)
13+
14+
# bfs ํ•จ์ˆ˜ ์ •์˜
15+
def bfs(start):
16+
queue = deque([start])
17+
18+
while queue: # ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋ฐ˜๋ณต
19+
u = queue.popleft() # ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๊บผ๋‚ธ๋‹ค.
20+
if not bfs_visited[u]: # ํ•ด๋‹น ๊ฐ’์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
21+
print(u, end=' ') # ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
22+
bfs_visited[u] = 1 # ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ ํ•ด์ค€๋‹ค.
23+
for v in sorted(graph[u]): # ํ•ด๋‹น ๊ฐ’๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
24+
if not bfs_visited[v]:
25+
queue.append(v)
26+
27+
# ์ •์ , ๊ฐ„์„ , ์‹œ์ž‘ํ•  ์ •์  ์ดˆ๊ธฐํ™”
28+
n, m, v = map(int, input().strip().split()) # n: ์ •์  ๊ฐœ์ˆ˜ / m: ๊ฐ„์„  ๊ฐœ์ˆ˜ / v: ์‹œ์ž‘ ๋ฒˆํ˜ธ
29+
dfs_visited = [0] * (n + 1) # DFS ๋ฐฉ๋ฌธ ๊ธฐ๋ก
30+
bfs_visited = [0] * (n + 1) # BFS ๋ฐฉ๋ฌธ ๊ธฐ๋ก
31+
graph = [[] for _ in range(n + 1)] # ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”
32+
33+
# ๊ทธ๋ž˜ํ”„ ์—ฐ๊ฒฐ
34+
for _ in range(m):
35+
a, b = map(int, input().strip().split())
36+
graph[a].append(b)
37+
graph[b].append(a)
38+
39+
dfs(v) # DFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
40+
print() # ์ค„๋ฐ”๊ฟˆ
41+
bfs(v) # BFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
def solution(record):
2+
answer = []
3+
dict = {}
4+
5+
# ์‚ฌ์šฉ์ž DB ๋”•์…”๋„ˆ๋ฆฌ
6+
for i in range(len(record)):
7+
temp = record[i].split()
8+
if temp[0] == 'Enter' or temp[0] == 'Change':
9+
dict[temp[1]] = temp[2]
10+
11+
# Enter, Change, Leave ์ˆœํšŒ
12+
for i in range(len(record)):
13+
temp = record[i].split()
14+
if temp[0] == 'Enter':
15+
answer.append(f"{dict[temp[1]]}๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.")
16+
elif temp[0] == 'Leave':
17+
answer.append(f"{dict[temp[1]]}๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.")
18+
19+
20+
return answer
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
def sepatate_uv(p): # ๋ฌธ์ž์—ด p๋ฅผ ๋‘ "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" u, v๋กœ ๋ถ„๋ฆฌ
2+
3+
open_bracket = 0 # (
4+
close_bracket = 0 # )
5+
for i in range(len(p)):
6+
if p[i] == '(':
7+
open_bracket += 1
8+
else:
9+
close_bracket += 1
10+
11+
# ์—ด๋ฆฐ ๊ด„ํ˜ธ๋ž‘ ๋‹ซํžŒ ๊ด„ํ˜ธ๋ž‘ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์•„์ง€๋Š” ์ˆœ๊ฐ„ u๋ฌธ์ž์—ด์ด๋ž‘ v๋ฌธ์ž์—ด์ด ๋‚˜๋‰จ
12+
if open_bracket == close_bracket:
13+
# u, v์ˆœ์„œ๋กœ ๋ฐ˜ํ™˜
14+
return p[:i+1], p[i+1:]
15+
16+
17+
def check_correct_string(u): # ๋ฌธ์ž์—ด u๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"์ธ์ง€ ํŒ๋‹จ
18+
# stack์ด ๋น„์–ด ์žˆ๋‹ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ฑฐ์ž„
19+
stack = []
20+
21+
for c in u:
22+
if c == '(':
23+
stack.append(c)
24+
else:
25+
if not stack:
26+
return False
27+
stack.pop()
28+
29+
if stack:
30+
return False
31+
else:
32+
return True
33+
34+
def solution(p):
35+
answer = 0
36+
# 1. ์ž…๋ ฅ์ด ๋นˆ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ, ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
37+
if not p:
38+
return p
39+
40+
# 2. ๋ฌธ์ž์—ด w๋ฅผ ๋‘ "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" u, v๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
41+
u, v = sepatate_uv(p)
42+
# 3. ๋ฌธ์ž์—ด u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ธ์ง€ ํŒ๋‹จ
43+
if check_correct_string(u): # ์ฐธ์ด๋ฉด ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆ˜ํ–‰
44+
# ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ u์— ์ด์–ด ๋ถ™์ธ ํ›„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
45+
answer = u + solution(v)
46+
return answer
47+
48+
else: # ๊ฑฐ์ง“์ด๋ผ๋ฉด
49+
# 4-1. ๋นˆ ๋ฌธ์ž์—ด์— ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋กœ '('๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
50+
answer = '('
51+
# 4-2. ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ž…๋‹ˆ๋‹ค.
52+
answer += solution(v)
53+
# 4-3. ')'๋ฅผ ๋‹ค์‹œ ๋ถ™์ž…๋‹ˆ๋‹ค.
54+
answer += ')'
55+
# 4-4. u์˜ ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์˜ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์–ด์„œ ๋’ค์— ๋ถ™์ž…๋‹ˆ๋‹ค.
56+
for c in u[1:len(u)-1]:
57+
if c == '(':
58+
answer += ')'
59+
else:
60+
answer += '('
61+
#4-5. ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
62+
return answer
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# ์ตœ์ข… ์ œ์ถœ
2+
import sys
3+
input = sys.stdin.readline
4+
5+
# ์ดˆ๊ธฐํ™”
6+
s = input().rstrip() # ์ „์ฒด ๋ฌธ์ž์—ด
7+
bomb = input().rstrip() # ํญ๋ฐœ ๋ฌธ์ž์—ด
8+
stack = [] # ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ
9+
bomb_length = len(bomb) # ํญ๋ฐœ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
10+
11+
# ์Šคํƒ๋งŒ์œผ๋กœ ๋ฌธ์ž์—ด ํญ๋ฐœ ํƒ์ƒ‰ ๋ฐ ํญ๋ฐœ ์ฒ˜๋ฆฌ
12+
for i in range(len(s)):
13+
stack.append(s[i])
14+
if ''.join(stack[-bomb_length:]) == bomb:
15+
for _ in range(bomb_length):
16+
stack.pop()
17+
18+
# ์ •๋‹ต ์ถœ๋ ฅ
19+
if stack:
20+
print(''.join(stack))
21+
else:
22+
print('FRULA')

0 commit comments

Comments
ย (0)