본문 바로가기
Algorithm/baekjoon

backjoon 2469: 사다리 타기

by 갈잃자 2022. 5. 17.

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

댓글