5426번: 비밀 편지백준/문제2024. 5. 6. 01:26
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/5426
언어 : Kotlin
문제 설명 :
선영이는 남자친구를 위해 연애 편지를 썼다. 선영이는 편지가 남들에게 읽히는 것을 막기 위해서 편지를 암호화하려고 한다.
먼저, 편지의 내용을 정사각형에 작성한다. 그 다음, 시계방향으로 90도 회전시킨다. 그 다음, 첫 행부터 마지막 행까지 순서대로 다시 편지를 작성한다. 선영이는 싸이월드 세대이기 때문에, 편지에 띄어쓰기를 쓰지 않는다.
예를 들어, 편지의 내용이 "RosesAreRedVioletsAreBlue"인 경우에, 암호화한 편지는 "eedARBtVrolsiesuAoReerles" 이 된다.
선영이가 암호화한 편지가 주어졌을 때, 원래 내용을 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스의 수는 최대 100개이다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 암호화된 편지가 주어진다. 편지는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 1보다 크거나 같고, 10,000보다 작거나 같으며, 항상 제곱수이다.
출력 :
각 테스트 케이스마다 원래 메시지를 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
3 RSTEEOTCP eedARBtVrolsiesuAoReerles EarSvyeqeBsuneMa |
TOPSECRET RosesAreRedVioletsAreBlue SquaresMayBeEven |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.sqrt
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val t = readLine().toInt()
repeat(t) {
readLine().also {
val temp = sqrt(it.length.toDouble()).toInt()
val before = it.chunked(temp)
val sb = StringBuilder()
for (j in temp - 1 downTo 0) {
for (i in before.indices) {
sb.append(before[i][j])
}
}
bw.appendLine(sb.toString())
bw.flush()
}
}
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
4613번: Quicksum (0) | 2024.05.06 |
---|---|
15814번: 야바위 대장 (0) | 2024.05.06 |
2469번: 사다리 타기 (0) | 2024.05.03 |
15881번: Pen Pineapple Apple Pen (0) | 2024.05.03 |
31403번: A + B - C (0) | 2024.05.03 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!