2022년 12월 31일에 작성됨
https://www.acmicpc.net/problem/5426
5426번: 비밀 편지
선영이는 남자친구를 위해 연애 편지를 썼다. 선영이는 편지가 남들에게 읽히는 것을 막기 위해서 편지를 암호화하려고 한다. 먼저, 편지의 내용을 정사각형에 작성한다. 그 다음, 시계방향으로
www.acmicpc.net
문제 분석
암호화된 문자 길이의 제곱근은 정사각형의 한 변의 길이가 된다.
따라서 원래 내용을 구할려면,
암호화된 문자 길이의 제곱수만큼 나누어진 각 구간의 끝 문자부터 차례대로 출력하면 된다.
RSTㅡEEOㅡTCP
eedARㅡBtVroㅡlsiesㅡuAoReㅡerles
EarSㅡvyeqㅡeBsuㅡneMa
TOPSECRET
RosesAreRedVioletsAreBlue
SquaresMayBeEven
소스 코드 (⭕)
import sys
from math import sqrt
input = sys.stdin.readline
test_case = int(input().rstrip())
for i in range(test_case):
password = []
slice_pw = []
password = input().rstrip()
one_len = int(sqrt(len(password)))
munja = []
cnt = 0
for j in range(one_len):
slice_pw.append(password[cnt:cnt+one_len])
cnt += one_len
for k in range(one_len-1, -1, -1):
for q in range(one_len):
munja.append(slice_pw[q][k])
print(*munja, sep='')
코드 분석
1. 제곱근 함수 sqrt를 사용하기 위해 math 모듈을 불러온다.
2. 테스트 케이스의 수를 빠른 입력으로 입력받고, 그 수 만큼 전체 반복을 해준다.
3. 암호화된 문자 password를 입력받고, 그 길이의 제곱근을 구해 one_len에 넣어준다.
4. 첫번째 for문으로 slice_pw 리스트에 암호화된 문자를 one_len만큼 구간을 나눈것을 추가해준다.
5. 두번째 for문으로 q는 0부터 (one_len 길이-1)까지, k는 one_len 길이부터 0까지 역순으로 반복하여 slice_pw[q][k]를 구해 munja 리스트에 넣어준다.
6. 마지막으로 munja 리스트의 요소들을 대괄호와 콤마 없이 출력해주면 된다.
end
문제 자체는 쉬웠지만 암호를 복호화 하는 과정을 코드로 구현하는 것이 조금 복잡했다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Python]백준_2909 : 캔디 구매 (0) | 2023.11.12 |
---|---|
[Python]백준_23253 : 자료구조는 정말 최고야 (0) | 2023.11.11 |
[Python]백준_5211 : 가단조와 다장조 (4) | 2023.11.10 |
[Python]백준_5566 : 주사위 게임 (0) | 2023.11.10 |
[Python]백준_13301 : 타일 장식물 (2) | 2023.11.09 |