Uknow's Lab.
article thumbnail

https://www.acmicpc.net/problem/5426

 

5426번: 비밀 편지

선영이는 남자친구를 위해 연애 편지를 썼다. 선영이는 편지가 남들에게 읽히는 것을 막기 위해서 편지를 암호화하려고 한다. 먼저, 편지의 내용을 정사각형에 작성한다. 그 다음, 시계방향으로

www.acmicpc.net

 

난이도 : 실버 5
태그 : 구현, 문자열, 수학

 

 

설명

문자열을 90도 돌려 출력하는 문제입니다.

배열에 넣고 for문으로 index 순서를 바꿔 출력하는 방법도 있겠지만,

 

배열을 사용하지 않고 그냥 풀이해보도록 하겠습니다.

 

 

 

RosesAreRedVioletsAreBlue

eedARBtVrolsiesuAoReerles

 

문자열의 길이는 25입니다. 5 x 5로 생각할 수 있겠네요.

암호 문자열의 5번째 문자인 R, 10번째 문자인 o, 15번째 문자인 s, 20번째 문자인 e, 25번째 문자인 s로

Roses를 구할 수 있습니다.

그 다음, 4(5-1) 번째 문자인 A, 9(10-1)번째 r, 14(15-1)번째 e, 19(20-1)번째인 R, 24(25-1)번째 문자인 e로

AreRe를 구할 수 있습니다.

 

문자열 길이의 제곱근을 n이라 했을 때,

n, n*2, n*3 ... , n*n

n - 1, n*2-1, n*3-1 ... n*n-1

.

.

.

0, n+1, n*2 +1 ... n*(n-1)+1 의 규칙을 발견할 수 있습니다.

 

 

 

소스코드

T = int(input())

for t in range(0, T):
    msg = input()
    n = int(len(msg) ** (1 / 2))

    decoded_msg = ""
    for i in range(n, 0, -1):
        for j in range(i, n * n + 1, n):
            decoded_msg += msg[j - 1]

    print(decoded_msg)

 

문자열 길이의 제곱근 n은 (1/2)를 제곱함으로써 구할 수 있습니다

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.