플레이페어 암호

발자·2023년 5월 8일
0

Softeer

목록 보기
1/17

문제

처음 맞은 코드

message = [i for i in input()]
key = [i for i in input()]

alpha = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

key_alpha = []

# 중복 제거
for i in key:
    if i not in key_alpha and i != 'J':
        key_alpha.append(i)

for i in alpha:
    if i not in key_alpha:
        key_alpha.append(i)

# 두 글자씩 나누기
messages = []
tem = ''
for m in range(len(message)):
    if len(tem) == 0:
        tem = message[m]
    elif len(tem) == 1:
        if tem == message[m] and tem != 'X':
            tem += 'X'
            messages.append(tem)
            tem = message[m]
        elif tem == message[m] and tem == 'X':
            tem += 'Q'
            messages.append(tem)
            tem = message[m]
        else:
            tem += message[m]
            messages.append(tem)
            tem = ''
    if len(tem) == 1 and m == len(message)-1:
        tem += 'X'
        messages.append(tem)

# 암호화
for m in range(len(messages)):
    i, j = messages[m][0], messages[m][1]
    ix, iy = key_alpha.index(i) // 5, key_alpha.index(i) % 5
    jx, jy = key_alpha.index(j) // 5, key_alpha.index(j) % 5

    if ix == jx:
        iy = (iy + 1) % 5
        jy = (jy + 1) % 5
    elif iy == jy:
        ix = (ix + 1) % 5
        jx = (jx + 1) % 5
    else:
        ty = iy
        iy = jy
        jy = ty
    messages[m] = key_alpha[ix*5+iy]+key_alpha[jx*5+jy]

# 이어쓰기
answer = ''
for i in messages:
    answer += i

print(answer)

alpha와 key_alpha의 중복 제거 부분 수정한 코드

message = [i for i in input()]
key = [i for i in input()]

alpha = [i for i in 'ABCDEFGHIKLMNOPQRSTUVWXYZ']

# 중복 제거
key_alpha = list(set(key + alpha))

# 두 글자씩 나누기
messages = []
tem = ''
for m in range(len(message)):
    if len(tem) == 0:
        tem = message[m]
    elif len(tem) == 1:
        if tem == message[m] and tem != 'X':
            tem += 'X'
            messages.append(tem)
            tem = message[m]
        elif tem == message[m] and tem == 'X':
            tem += 'Q'
            messages.append(tem)
            tem = message[m]
        else:
            tem += message[m]
            messages.append(tem)
            tem = ''
    if len(tem) == 1 and m == len(message)-1:
        tem += 'X'
        messages.append(tem)

# 암호화
for m in range(len(messages)):
    i, j = messages[m][0], messages[m][1]
    ix, iy = key_alpha.index(i) // 5, key_alpha.index(i) % 5
    jx, jy = key_alpha.index(j) // 5, key_alpha.index(j) % 5

    if ix == jx:
        iy = (iy + 1) % 5
        jy = (jy + 1) % 5
    elif iy == jy:
        ix = (ix + 1) % 5
        jx = (jx + 1) % 5
    else:
        ty = iy
        iy = jy
        jy = ty
    messages[m] = key_alpha[ix*5+iy]+key_alpha[jx*5+jy]

# 이어쓰기
answer = ''
for i in messages:
    answer += i

print(answer)

위 코드에서 사용한 함순는 아니지만 풀면서 발견한 함수이다.
🧩 enumerate() 함수

0개의 댓글