문제 출처 : https://www.acmicpc.net/problem/4446
언어 : Kotlin
문제 설명 :
간달프는 여러 종족의 언어를 꽤 오랜 시간 동안 공부했다. 최근에 간달프는 해커들이 사용하는 언어인 ROT13을 공부했다. 이 언어는 영어와 문법이 같지만, 알파벳의 순서를 어떤 규칙을 이용해서 바꾸는 것이다.
모음은 총 6개가 있다.
(a i y e o u)
모음은 각 위치에서 세 번째 오른쪽 위치에 있는 모음으로 바꾼다. 위의 수열은 사이클이라서 마지막과 첫 위치는 서로 붙어있는 것이다. 이때, 대소문자는 유지해야 한다.
자음도 모음과 비슷하게 바꾸면 된다.
(b k x z n h d c w g p v j q t s r l m f)
자음은 각 위치에서 열번 위치에 있는 자음으로 바꾼다.
다음과 같은 문장 "One ring to rule them all." ROT13을 이용하면 "Ita dotf ni dyca nsaw ecc."으로 바꿀 수 있다.
ROT13으로 쓴 문장이 주어졌을 때, 원래 영어로 쓴 문장으로 바꾸는 프로그램을 작성하시오.
입력 :
입력은 여러 줄로 이루어져 있다. 각 줄은 100글자 이내의 문장이고, ROT13으로 쓰여진 문장이다. 이 문장의 각 글자는 ASCII 문자 공백(32) 부터 ~(126)까지이다.
출력 :
각 줄에 대해서 ROT13을 영어로 바꾼 문장을 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
Ita dotf ni dyca nsaw ecc. | One ring to rule them all. |
풀이 :
여러 줄을 입력받는다 하였으므로 while (true) {} 내부에 작성하며 EOF를 생각한다.
변환되는 규칙에 맞춰 UpperCase로 들어왔으면 변환되더라도 동일하게 UpperCase를 유지할 수 있도록 변수값으로 체크를 한다. 사이클이므로 넘어가더라도 문제 없도록 나머지연산을 시행시킨다.
공백이나 특수기호, 줄넘김은 해당사항 없으므로 그냥 입력하고 넘어간다.
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val vowels = "aiyeou"
val consonants = "bkxznhdcwgpvjqtsrlmf"
while (true) {
val line = readLine() ?: break
val result = StringBuilder()
for (c in line) {
val (isUpper, lowerChar) = if (c.isUpperCase()) Pair(true, c.lowercaseChar()) else Pair(false, c)
val newChar = when (lowerChar) {
in vowels -> {
val tempChar = vowels[(vowels.indexOf(lowerChar) + 3) % vowels.length]
if (isUpper) tempChar.uppercaseChar() else tempChar
}
in consonants -> {
val tempChar = consonants[(consonants.indexOf(lowerChar) + 10) % consonants.length]
if (isUpper) tempChar.uppercaseChar() else tempChar
}
else -> c
}
result.append(newChar)
}
bw.write(result.toString())
bw.newLine()
}
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
12174번: #include <Google I/O.h> (0) | 2024.07.26 |
---|---|
26560번: Periods (0) | 2024.07.26 |
16205번: 변수명 (1) | 2024.07.25 |
10932번: SHA-512 (0) | 2024.07.24 |
14174번: Block Game (0) | 2024.07.24 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!