728x90
https://softeer.ai/practice/info.do?idx=1&eid=804&sw_prbl_sbms_sn=162388
💡 문제 풀이
전형적인 구현 문제이다.
key에 맞춰서 5x5 짜리 판을 초기화해 주고, 특정 알파벳의 위치를 저장한 테이블을 초기화한다.
이후 2자리로 잘라준다음 요구사항에 맞춰서 구현하면 된다.
주의할 점은 X가 단 하나 남았을 경우 XX가 만들어진다는 점과 J를 사용하지 않는다는 점이다.
✔️ 느낀 점
크게 어려울 것 없는 문제였다.
💻 코드
import sys ; input = sys.stdin.readline
from collections import deque
ALPHABET = "ABCDEFGHIKLMNOPQRSTUVWXYZ"
SIZE = 5
def initBoard(key):
board = [[0] * SIZE for _ in range(SIZE)]
tmp = ""
for ch in key:
if ch not in tmp:
tmp += ch
for ch in ALPHABET:
if ch not in tmp:
tmp += ch
for i in range(SIZE):
for j in range(SIZE):
board[i][j] = tmp[i * SIZE + j]
return board
def initTokens(message):
tokens = []
q = deque(list(message))
while q:
ch1 = q.popleft()
ch2 = "X"
if q:
tmp = q.popleft()
if ch1 != tmp: ch2 = tmp
else:
if ch1 == "X": ch2 = "Q"
q.appendleft(tmp)
tokens.append(ch1 + ch2)
return tokens
def initTable(board):
table = {}
for i in range(SIZE):
for j in range(SIZE):
table[board[i][j]] = (i, j)
return table
def solution(tokens, board, table):
encrypt = ""
for first, second in tokens:
x1, y1 = table[first]
x2, y2 = table[second]
if x1 == x2:
y1 = (y1 + 1) % SIZE
y2 = (y2 + 1) % SIZE
elif y1 == y2:
x1 = (x1 + 1) % SIZE
x2 = (x2 + 1) % SIZE
else:
tmp = y1
y1 = y2
y2 = tmp
encrypt += board[x1][y1] + board[x2][y2]
return encrypt
message = input().rstrip()
key = input().rstrip()
board = initBoard(key)
tokens = initTokens(message)
table = initTable(board)
print(solution(tokens, board, table))
'문제 풀이 > 소프티어 (Softeer)' 카테고리의 다른 글
[Python] 소프티어 : 징검다리 (0) | 2023.03.05 |
---|---|
[Python] 소프티어 : 마이크로서버 (0) | 2023.02.21 |
[Python] 소프티어 : 거리 합 구하기 (0) | 2023.02.20 |
[Python] 소프티어 : 이미지 프로세싱 (0) | 2023.02.20 |
[Python] 소프티어 : 로드 밸런서 트래픽 예측 (0) | 2023.02.19 |
댓글