๐ข ์ฌ๋ค๋ฆฌ ํ๊ธฐ
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3
32276KB
84ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
"""
[2469] ์ฌ๋ค๋ฆฌ ํ๊ธฐ
๐ ๋ฌธ์
k๋ช
์ ์ฐธ๊ฐ์๋ค์ด ์ฌ๋ค๋ฆฌ ํ๊ธฐ๋ฅผ ํตํ์ฌ ์ด๋ค ์์๋ฅผ ๊ฒฐ์ ํ๋ค.
์ฐธ๊ฐ์๋ค์ ์ํ๋ฒณ ๋๋ฌธ์ ์ฒซ k๊ฐ๋ก ํํ๋๋ฉฐ,
์ฌ๋ค๋ฆฌ ํ๊ธฐ๋ฅผ ์์ํ ๋์ ์์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํญ์ ์ํ๋ฒณ ์์๋๋ก์ด๋ค.
k=10 ์ธ ์๋ฅผ ๋ค์ด ๋ณด์.
10๋ช
์ A, B, C, D, E, F, G, H, I, J ์ฐธ๊ฐ์๋ค์ด ์ฌ๋ค๋ฆฌ ํ๊ธฐ๋ฅผ ์ค๋นํ๋ค.
์๋ ๊ทธ๋ฆผ์ 10๊ฐ์ ์ธ๋ก ์ค๊ณผ 5๊ฐ์ ๊ฐ๋ก ์ค์ ๊ฐ์ง๊ณ ์๋ ์ฌ๋ค๋ฆฌ์ ํ ์๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
์ด ์ฌ๋ค๋ฆฌ์์ ์ ์ ์ ๊ฐ๋ก ๋ง๋๊ฐ ์์์, ๊ตต์ ๊ฐ๋ก ์ค์ ์ ์์ผ๋ก ๊ฑด๋๊ฐ ์ ์๋ ๊ฐ๋ก ๋ง๋๊ฐ ์์
์ ์๋ ์ฌ๋ค๋ฆฌ๋ฅผ ํ๋ฉด ๊ทธ ์ต์ข
๋๋ฌ๋ ์์๋ ์ผ์ชฝ์ผ๋ก๋ถํฐ A, C, G, B, E, D, J, F, I, H ๊ฐ ๋๋ค.
์ฌ๋ค๋ฆฌ ํ๊ธฐ๋ ์ธ๋ก ๋ง๋๋ฅผ ํ๊ณ ๋ด๋ ค์ค๋ ์ค์ ๊ฐ๋ก๋ง๋๋ฅผ ๋ง๋๋ฉด ๊ทธ ์ชฝ์ผ๋ก ์ฎ๊ฒจ ๊ฐ๋ฉด์ ๋๊น์ง ๋ด๋ ค๊ฐ๋ ๊ณผ์ ์ด๋ค.
์ฌ๋ค๋ฆฌ ํ๊ธฐ์ ๊ท์น ํน์ฑ์ ๋ ๊ฐ๋ก ๋ง๋๊ฐ ์ง์ ์ฐ๊ฒฐ๋ ์๋ ์์ผ๋ฏ๋ก ์ด ์ํฉ์ ์ด ๋ฌธ์ ์์ ๊ณ ๋ คํ ํ์๊ฐ ์๋ค.
์ฐ๋ฆฌ๋ ํ๋์ ๊ฐ๋ก ์ค์ด ๊ฐ์ถ์ด์ง ์ฌ๋ค๋ฆฌ๋ฅผ ๋ฐ์์
๊ทธ ์ค์ ๊ฐ ์นธ์ ๊ฐ๋ก ๋ง๋๋ฅผ ์ ์ ํ ๋ฃ์ด์ ์ฐธ๊ฐ์๋ค์ ์ต์ข
์์๊ฐ ์ํ๋ ์์๋๋ก ๋์ค๋๋ก ๋ง๋ค๋ ค๊ณ ํ๋ค.
์
๋ ฅ์์ ์ฌ๋ค๋ฆฌ์ ์ ์ฒด ๋ชจ์์ ๊ฐ ์ค์ ์๋ ๊ฐ๋ก ๋ง๋์ ์ ๋ฌด๋ก ํํ๋๋ค.
๊ฐ ์ค์์ ๊ฐ๋ก ๋ง๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ โ*โ(๋ณ)๋ฌธ์, ์์ ๊ฒฝ์ฐ์๋ โ-โ(๋นผ๊ธฐ) ๋ฌธ์๋ก ํ์๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ถ์ด์ง ํน์ ๊ฐ๋ก ์ค์ ๊ธธ์ด k-1์ธ โ?โ (๋ฌผ์ํ) ๋ฌธ์์ด๋ก ํ์๋์ด ์๋ค.
๐ ์
๋ ฅ
์ฒซ ์ค์๋ ์ฐธ๊ฐํ ์ฌ๋์ ์ k๊ฐ ๋์จ๋ค(3 โค k โค 26).
๊ทธ ๋ค์ ์ค์๋ ๊ฐ๋ก ๋ง๋๊ฐ ๋์ผ ์ ์ฒด ๊ฐ๋ก ์ค์ ์๋ฅผ ๋ํ๋ด๋ n์ด ๋์จ๋ค(3 โค n โค 1,000).
์ธ ๋ฒ์งธ ์ค์๋ ์ฌ๋ค๋ฆฌ๋ฅผ ํ๊ณ ๋ ํ ๊ฒฐ์ ๋ ์ฐธ๊ฐ์๋ค์ ์ต์ข
์์๊ฐ ๊ธธ์ด k์ธ ๋๋ฌธ์ ๋ฌธ์์ด๋ก ๋ค์ด์จ๋ค.
์ด์ด์ง๋ n๊ฐ์ ์ค์๋ ์์ ์ค๋ช
ํ ๋ฐ์ ๊ฐ์ด โ*โ์ โ-โ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๊ธธ์ด k-1์ธ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค.
๊ทธ ์ค ๊ฐ์ถ์ด์ง ๊ฐ๋ก ์ค์ ๊ธธ์ด๊ฐ k-1์ธ โ?โ ๋ฌธ์์ด๋ก ํ์๋์ด ์๋ค.
๐ ์ถ๋ ฅ
์
๋ ฅ ํ์ผ ์ธ ๋ฒ์งธ ์ค์์ ์ง์ ํ ๋์ฐฉ์์๊ฐ ํด๋น ์ฌ๋ค๋ฆฌ์์ ๋ง๋ค์ด์ง ์ ์๋๋ก ๊ฐ์ถ์ด์ง ๊ฐ๋ก ์ค์ ๊ตฌ์ฑํด์ผ ํ๋ค.
๊ฐ์ถ์ด์ง ๊ฐ๋ก ์ค์ ์ํ๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ์ด๋ฅผ โ*โ(๋ณ) ๋ฌธ์์ โ-โ(๋นผ๊ธฐ) ๋ฌธ์๋ก ๊ตฌ์ฑ๋ ๊ธธ์ด k-1์ธ ๋ฌธ์์ด๋ก ๋ง๋ค์ด ์ถ๋ ฅํ๋ฉด ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ค ๊ฒฝ์ฐ์๋ ๊ทธ ๊ฐ์ถ์ด์ง ๊ฐ๋ก ์ค์ ์ด๋ป๊ฒ ๊ตฌ์ฑํด๋ ์ํ๋ ์์๋ฅผ ์ป์ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ด ๊ฒฝ์ฐ์๋ โxโ(์๋ฌธ์ ์์ค)๋ก ๊ตฌ์ฑ๋ ๊ธธ์ด k-1์ธ ๋ฌธ์์ด์ ์ถ๋ ฅํด์ผ ํ๋ค.
"""
# ์ฐธ๊ฐํ ์ฌ๋์ ์
k = int(input())
# ๊ฐ๋ก ๋ง๋๊ฐ ๋์ผ ์ ์ฒด ๊ฐ๋ก ์ค์ ์
n = int(input())
# ์ฌ๋ค๋ฆฌ๋ฅผ ํ๊ณ ๋ ํ ๊ฒฐ์ ๋ ์ฐธ๊ฐ์๋ค์ ์ต์ข
์์๊ฐ ๊ธธ์ด (๋๋ฌธ์ ๋ฌธ์)
ladder = list(input())
# โ*โ์ โ-โ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๊ธธ์ด k-1์ธ ๋ฌธ์์ด
graph = []
for i in range(n):
graph.append(list(input()))
up = [[-1] * k for _ in range(n)]
down = [[-1] * k for _ in range(n)]
for i in range(k):
up[0][i] = i
down[-1][i] = ord(ladder[i]) - 65
def up_ladder():
for i in range(n):
if (graph[i][0] == '?'):
temp = up[i]
return temp
else:
for j in range(k-1):
if j > 0 and j < k - 2:
if (graph[i][j] == '-'):
up[i+1][j+1] = up[i][j]
elif (graph[i][j-1] == '-'):
up[i+1][j-1] = up[i][j]
else:
up[i+1][j] = up[i][j]
elif j == k-2:
if (graph[i][j-1] == '-'):
up[i+1][j-1] = up[i][j]
up[i+1][j+1] = up[i][j+1]
elif (graph[i][j] == '-'):
up[i+1][j] = up[i][j+1]
up[i+1][j+1] = up[i][j]
else:
up[i+1][j+1] = up[i][j+1]
up[i+1][j] = up[i][j]
else:
if (graph[i][j] == '-'):
up[i+1][j+1] = up[i][j]
else:
up[i+1][j] = up[i][j]
def down_ladder():
temp = []
for i in range(n-1, -1, -1):
if (graph[i][0] == '?'):
temp = down[i]
return temp
for j in range(k-1):
if j > 0 and j < k - 2:
if (graph[i][j] == '-'):
down[i-1][j+1] = down[i][j]
elif (graph[i][j-1] == '-'):
down[i-1][j-1] = down[i][j]
else:
down[i-1][j] = down[i][j]
elif j == k-2:
if (graph[i][j-1] == '-'):
down[i-1][j-1] = down[i][j]
down[i-1][j+1] = down[i][j+1]
elif (graph[i][j] == '-'):
down[i-1][j] = down[i][j+1]
down[i-1][j+1] = down[i][j]
else:
down[i-1][j+1] = down[i][j+1]
down[i-1][j] = down[i][j]
elif j == 0:
if (graph[i][j] == '-'):
down[i-1][j+1] = down[i][j]
else:
down[i-1][j] = down[i][j]
up_temp = up_ladder()
down_temp = down_ladder()
answer = []
for i in range(k-1):
if up_temp[i] == down_temp[i]:
answer.append("*")
else:
# ๋ค๋ฆฌ ๋์ฃผ๊ธฐ
if up_temp[i] == down_temp[i+1]:
answer.append("-")
# ์ด์ด์ฃผ๊ธฐ
elif i != 0 and up_temp[i] == down_temp[i-1]:
answer.append("*")
else:
answer = ['x' for _ in range(k-1)]
break
print(''.join(answer))
3. ํด์ค
์ ์๋ k, ์ฌ๋ค๋ฆฌlist๋ k-1 ๋ผ์ ๋ง์ง๋ง ์ฌ๋ค๋ฆฌ๋ฅผ ๊ฒฐ์ ํ ๋ ๋ง์ง๋ง์ด๋, ๊ทธ์ ์ฌ๋ค๋ฆฌ์ ์กฐ๊ฑด์ ๊ฐ์ด ๋ฌถ์ด๋จ๋ค
up, down ํจ์๋ก ๋ง๋ค์๊ณ ? ์ค๊ธฐ ์ ๊น์ง ์ ์๋ค์ ์์น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ค
๋ง์ง๋ง์ผ๋ก ? ์ ํ๋ก ์์น๊ฐ ๊ฐ์ผ๋ฉด * ๋๊ฐ
? ์ ํ๋ก ์์น๊ฐ cross ๋์ด์์ผ๋ฉด *-
์์ ์๋๋ค๋ฉด ๋ฐ๋ก xxxxx~~ ๋ก ํ๊ฒ๋ ํ๋ค
This post is licensed under CC BY 4.0 by the author.