코딩테스트 & 문제 풀이

[Python]백준_2999 : 비밀 이메일

Hicecream 2023. 11. 12. 00:53

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

이것저것 헷갈렸던 문제..!