2023년 1월 3일에 작성됨
https://www.acmicpc.net/problem/2999
2999번: 비밀 이메일
정인이는 원래 "bombonisuuladici"를 보내려고 했다. 이 메시지는 16글자이므로, 정인이는 1*16, 2*8, 4*4 행렬을 선택할 수 있다. R이 가장 큰 것은 4*4이므로, 4*4를 선택한다. 정인이가 만든 행렬은 다음과
www.acmicpc.net
소스 코드 (⭕)
str = input() # 문자열 str 입력
len = len(str) # 입력받은 문자열 길이 len
x, y = 0, 0
# 행 R개와 열 C개를 구하는 이중 반복문 (R이 커야 됨)
for r in range(1, int(len/2)+1):
for c in range(r, len+1):
if r*c == len:
x, y = r, c
# 문자열 해독하는 과정
for i in range(x):
for j in range(y):
print(str[i+j*x], end='')
코드 분석
1. r을 문자열 길이 절반만큼 반복하고, c를 r부터 문자열 길이 끝까지 반복해서 r*c가 len과 같으면 x, y에 r, c 값을 넣어준다.
2. r이 바깥쪽 for문이므로 반복문을 끝까지 돌려주면 r*c==len이 성립하는 r의 가장 큰 값을 구할 수 있다.
3. 이중 for문으로 i는 x만큼, j는 y만큼 반복해준다. 입력받은 문자열 str을 j길이 만큼 끊어서 각각 i번째 문자를 출력해준다.
end
이것저것 헷갈렸던 문제..!
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Java]백준_11942 : 고려대는 사랑입니다 (0) | 2023.11.14 |
---|---|
[Python]백준_10807 : 개수 세기 (0) | 2023.11.13 |
[Python]백준_2909 : 캔디 구매 (0) | 2023.11.12 |
[Python]백준_23253 : 자료구조는 정말 최고야 (0) | 2023.11.11 |
[Python]백준_5426 : 비밀 편지 (0) | 2023.11.10 |