https://www.acmicpc.net/problem/2469
2469번: 사다리 타기
첫 줄에는 참가한 사람의 수 k가 나온다(3 ≤ k ≤ 26). 그 다음 줄에는 가로 막대가 놓일 전체 가로 줄의 수를 나타내는 n이 나온다(3 ≤ n ≤ 1,000). 그리고 세 번째 줄에는 사다리를 타고 난 후 결정
www.acmicpc.net
로직을 간단하게 설명 하자면,
1. 시작하는 알파벳과 도착한 알파벳이 ?로 되어있는 배열에 맞닿을 때 까지 움직인다.
2. 맞닿았을 때 서로 한칸차이가 난다면 "-", 서로 차이가 나지 않는다면 "*", 서로 두칸이상 차이가 난다면 "x"*n개 만큼 출력이 되게 한다.
ABC=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
k=int(input())
n=int(input())
want=input()
nlist=[]
for i in range(n):
A=input()
if A == '?'*(k-1):
idx=i
nlist.append(A)
ST=[]
ST2=[]
for i in range(k):
if i == k-1:
ST.append(ABC[i])
ST2.append(want[i])
else:
ST.append(ABC[i])
ST2.append(want[i])
ST.append('*')
ST2.append('*')
for i in range(idx):
for j in range(k - 1):
if nlist[i][j] == '-':
ST[j*2], ST[j*2+2] = ST[j*2+2], ST[j*2]
for i in reversed(range(idx+1,n)):
for j in range(k - 1):
if nlist[i][j] == '-':
ST2[j*2], ST2[j*2+2] = ST2[j*2+2], ST2[j*2]
result=''
for i in range(0,k+k-3,2):
if ST[i]==ST2[i] and ST[i+2]==ST2[i+2]:
result += '*'
elif ST[i] == ST2[i+2] and ST[i+2] == ST2[i]:
result += '-'
else:
result += '*'
for j in range(k - 1):
if result[j] == '-':
ST[j*2], ST[j*2+2] = ST[j*2+2], ST[j*2]
if ST == ST2:
print(result)
else:
print('x'*(k-1))
'Algorithm > baekjoon' 카테고리의 다른 글
beakjoon 16500: 문자열 판별 (0) | 2022.06.14 |
---|---|
backjoon 11055: 가장 큰 증가 부분 수열 (0) | 2022.05.19 |
baekjoon 14606: 피자(small) (0) | 2022.05.17 |
baekjoon 2589: 보물섬 (1) | 2022.04.26 |
baekjoon 2468: 안전영역 (0) | 2022.04.16 |
댓글