#문제
https://softeer.ai/practice/info.do?idx=1&eid=804
#문제 분석
- 음.. 아주아주 조건이 많은 빡구현 문제이다. 코드 한줄이라도 틀리면 그냥 바로 틀리기 딱 쉬운 문제..? 딱히 알고리즘은 없고 주어진 조건만 잘 구현하면 될듯하다. 이런 문제는 중간중간 디버깅을 해가면서 맞았는지 확인해봐야 시간 낭비를 안할 것 같다. 현대도 구현을 좋아하나..?
- 딕셔너리를 잘 활용했더니 마지막 변환 과정에서 좌표를 따로 손대지 않고 쉽게 풀 수 있었다.
#코드
import sys
from collections import deque
input=sys.stdin.readline
message=input().rstrip()
key=input().rstrip()
keyQ=deque(list(key))
board=[[None]*5 for _ in range(5)]
key_loc={}
duplicate=[0]*26
duplicate[9]=1
cur=0
for i in range(5):
for j in range(5):
while keyQ:
char=keyQ[0]
if duplicate[ord(char)-65]==0:
duplicate[ord(char)-65]=1
keyQ.popleft()
board[i][j]=char
key_loc[char]=(i,j)
break
else:
keyQ.popleft()
else:
for d in range(len(duplicate)):
if(duplicate[d]==0):
duplicate[d]=1
board[i][j]=chr(65+d)
key_loc[chr(65+d)]=(i,j)
break
split_messsage=[]
i=0
while i<len(message):
if i==len(message)-1:
split_messsage.append(message[i]+'X')
break
elif message[i]==message[i+1]:
if(message[i]=='X'):
split_messsage.append(message[i]+"Q")
else:
split_messsage.append(message[i]+"X")
i=i+1
else:
split_messsage.append(message[i:i+2])
i=i+2
answer=""
for a,b in split_messsage:
ar,ac=key_loc[a][0],key_loc[a][1]
br,bc=key_loc[b][0],key_loc[b][1]
if ar==br:
ac-=1 if ac!=4 else 0
bc-=1 if bc!=4 else 0
elif ac==bc:
ar+=1 if ar!=4 else 0
br+=1 if br!=4 else 0
else:
ac,bc=bc,ac
answer+=board[ar][ac]+board[br][bc]
print(answer)
'Computer Science > 알고리즘(백준+프로그래머스)' 카테고리의 다른 글
백준 1238) 파티_Python (0) | 2022.11.02 |
---|---|
백준 1520) 내리막길_Python (0) | 2022.10.27 |
백준 16118) 달빛 여우_Python (0) | 2022.10.22 |
백준 17144) 미세먼지 안녕!_Python (0) | 2022.07.08 |
백준 14501) 퇴사_ Python (0) | 2022.07.01 |