https://www.acmicpc.net/problem/2469
2469๋ฒ: ์ฌ๋ค๋ฆฌ ํ๊ธฐ
์ฒซ ์ค์๋ ์ฐธ๊ฐํ ์ฌ๋์ ์ k๊ฐ ๋์จ๋ค(3 โค k โค 26). ๊ทธ ๋ค์ ์ค์๋ ๊ฐ๋ก ๋ง๋๊ฐ ๋์ผ ์ ์ฒด ๊ฐ๋ก ์ค์ ์๋ฅผ ๋ํ๋ด๋ n์ด ๋์จ๋ค(3 โค n โค 1,000). ๊ทธ๋ฆฌ๊ณ ์ธ ๋ฒ์งธ ์ค์๋ ์ฌ๋ค๋ฆฌ๋ฅผ ํ๊ณ ๋ ํ ๊ฒฐ์
www.acmicpc.net
#์ฒ์์ ์๊ฐํ๋ ๋ฐฉ๋ฒ

์ฒ์๊ณผ ๋์ฐฉ์ ์ด๋๋ ์์น์ ๊ฐฏ์๋ฅผ ๊ฐ๊ฐ ์ฒดํฌํด ์ด๋๋ ์ซ์๋ฅผ ๋ํด 2๋ก ๋๋์๋ค.
์์ ์ซ์์ ladder์ ๋ฐ์ '-'์ ๋น๊ตํด ๊ทธ ์ฐจ์ด๊ฐ '??'์ ๋ค์ด๊ฐ๋ '-'์ ๊ฐฏ์์ธ ์ ์ ๋ฐ๊ฒฌํ๋ค.
๋ง์ฝ ladder์ '-'์ ๊ฐฏ์๊ฐ ์ฒดํฌ๋ ์๋ณด๋ค ์๋ค๋ฉด ''??'์๋ 'xx'๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๊ณ ,
๊ฐ๋ค๋ฉด '**'๋ก ์ฑ์์ง๋ ๋ก์ง.. ๊ทธ๋ฌ๋ ??์ '-','*'์ ๋ฐฐ์น์ ์ด๋ ค์์ด ์๋ ์ฝ๋๋ผ ๊ฒฐ๊ตญ ํ๊ธฐํ๋ค.
k = int(input()) # ์ฌ๋์
n = int(input()) # ์ฌ๋ค๋ฆฌ์ค ์
result = list(map(ord,input()))
ladder = [list(map(str,input())) for _ in range(n)]
alp = []
for i in range(k):
alp.append(ord('A')+i)
vs = []
for j in range(k):
a = alp[j]-result[j]
vs.append(a)
sumV=0
for v in vs:
if v >0:
sumV+=v
cnt=0
for y in range(len(ladder)):
for x in range(len(ladder[y])):
if ladder[y][x] == '-':
cnt+=1
output_cnt = cnt-sumV
if output_cnt <0:
print('x'*(k-1))
elif output_cnt == 0:
print('*'*(k-1))
else:
pass #๋ด๊ฐ ๊ตฌํํ์ง ๋ชปํ ๋ถ๋ถ...
print(vs)
#์ต์ข ์ฝ๋
์คํฐ๋์์ ์์ด๋์ด๋ฅผ ๋๋ฒจ๋กญํ๋ค.
๋ฌผ์ํ ์์ ๋ฌผ์ํ ์๋๋ฅผ ๋น๊ตํด์ '??'๋ถ๋ถ์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ๋ฒ
์ฒ์์๋ ladder๋ฐฐ์ด์์ ์ฌ๋ค๋ฆฌ๋ฅผ ์ง์ ํ์ผํ๋ ํ์ง๋ง,
start๋ฐฐ์ด๊ณผ result๋ฐฐ์ด์ ์ง์ swapํ์ฌ ๋น๊ตํ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
def find():
global ladder,result,k,n
start = [] #์์์ ์ ABCD... ๋ฃ์ด ์ฃผ๊ธฐ์ํ ๋น ๋ฆฌ์คํธ
for i in range(k):
start.append(chr(ord('A') + i))
mark = 0 #๋ฌผ์ํ ์๋ ์ค
#๋ฌผ์ํ ์ ์ํ๋ฒณ
for y in range(n):
if ladder[y][0] == '?':
mark = y
break
else:
for x in range(k-1):
if ladder[y][x] == '-':
start[x],start[x+1] = start[x+1],start[x]
#๋ฌผ์ํ ์๋ ์ํ๋ฒณ
for y in reversed(range(mark+1,n)): #์๋๋ถํฐ ์๋ก!
if ladder[y][0] == '?':
break
else:
for x in range(k-1):
if ladder[y][x] == '-':
result[x],result[x+1] = result[x+1],result[x]
answer=[]
#๋ฌผ์ํ ์์ ์๋ ๋น๊ต
for i in range(k-1):
if start[i] == result[i]: #๊ฐ์๋
answer.append('*')
else: #๋ค๋ฅผ๋
if start[i] == result[i+1]: #์(์ค๋ฅธ์ชฝ) ์ธ๋ฑ์ค๋ ๊ฐ์ผ๋ฉด
answer.append('-')
elif i!=0 and start[i]==result[i-1]: #์(์ผ์ชฝ) ์ธ๋ฑ์ค๋ ๊ฐ์ผ๋ฉด, out of index ๋ฐฉ์ง๋ฅผ ์ํด i๊ฐ 0์ธ๊ฑธ ๋ฐฐ์
answer.append('*')
else: #์ด๋ค ๊ตฌ์ฑ์ผ๋ก๋ ๋ง๋ค ์ ์์ ๋
return (''.join(['x' for _ in range(k - 1)]))
return ''.join(answer)
k = int(input()) # ์ฌ๋์
n = int(input()) # ์ฌ๋ค๋ฆฌ์ค ์
result = list(map(str,input())) #๋์ฐฉํ์ ๋
ladder = [list(map(str,input())) for _ in range(n)] #์ฌ๋ค๋ฆฌ์ ๋ฐฐ์ด
ret = find()
print(ret)
'Problem Solving > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[baekjoon]python #1946 ์ ์ ์ฌ์ (0) | 2022.05.13 |
---|---|
[baekjoon]python #2636 ์น์ฆ (0) | 2022.05.10 |
[baekjoon]python #2606 ๋ฐ์ด๋ฌ์ค (0) | 2022.05.02 |
[baekjoon]python #2589 ๋ณด๋ฌผ์ฌ (0) | 2022.04.26 |
[baekjoon]python #19949 ์์ฌ์ ์ํ (0) | 2022.04.14 |
๋๊ธ