https://www.acmicpc.net/problem/5426
난이도 : 실버 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)를 제곱함으로써 구할 수 있습니다
'코딩테스트 > Python' 카테고리의 다른 글
[백준 5566번] [Python] 주사위 게임 (0) | 2022.11.11 |
---|---|
[백준 5211번] [Python] 가단조와 다장조 (0) | 2022.11.11 |
[백준 4998번] [Python] 저금 (0) | 2022.11.03 |
[백준 2810번] [Python] 컵홀더 (0) | 2022.11.03 |
[백준 17358번] [Python] 복불복으로 지구 멸망 (0) | 2022.10.14 |