17176번: 암호해독기백준/문제2024. 5. 17. 01:22
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/17176
언어 : Kotlin
문제 설명 :
방금 도착한 암호문을 해독했는데, 해독에 오류가 없는지 확인해보려 한다. 해독한 문장이 암호문을 해석한 결과로 나올 수 없다면, 그 해독은 잘못된 것이다.
암호문은 0 이상 52 이하의 정수로 이루어져 있다. 0은 띄어쓰기, 1 - 26 범위 안의 수는 A ~ Z, 27 - 52 범위 안의 수는 a ~ z로 해석된다. 암호문은 띄어쓰기를 포함한 모든 철자를 이와 같이 정수로 치환한 후 순서를 무작위로 뒤섞어서 만들어졌다.
입력 :
첫 번째 줄에는 주어질 수열의 길이 N이 주어진다. (1 ≤ N ≤ 100,000)
두 번째 줄에는 암호문에 해당하는 수 N개가 띄어쓰기와 함께 주어진다.
세 번째 줄에는 평문이 주어진다. 단, 평문의 길이는 N과 같으며, 띄어쓰기로 시작하거나 끝나지 않는다.
출력 :
평문을 암호화해서 주어진 암호문을 만들 수 있다면 "y", 아니라면 "n"을 따옴표 없이 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 512MB
입출력 예 :
입력 | 출력 |
11 44 0 38 41 38 31 23 8 41 30 38 Hello World |
y |
5 12 3 34 52 0 apple |
n |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.system.exitProcess
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = readLine().toInt()
val password = readLine().split(" ").map { it.toInt() }.sorted()
val inputArr = readLine().map {
when (it) {
' ' -> 0
else -> {
when {
it.isLowerCase() -> it - 'a' + 27
else -> it - 'A' + 1
}
}
}
}.sorted()
if (password.size == inputArr.size) {
for (i in password.indices) {
if (password[i] != inputArr[i]) {
exitAndResult(bw, false)
}
}
} else {
exitAndResult(bw, false)
}
exitAndResult(bw, true)
}
fun exitAndResult(bw: BufferedWriter, result: Boolean) {
bw.write(if (result) "y" else "n")
bw.flush()
bw.close()
exitProcess(0)
}
'백준 > 문제' 카테고리의 다른 글
10384번: 팬그램 (0) | 2024.05.17 |
---|---|
9226번: 도깨비말 (0) | 2024.05.17 |
11507번: 카드셋트 (0) | 2024.05.16 |
1605번: 반복 부분문자열 (0) | 2024.05.16 |
25915번: 연세여 사랑한다 (0) | 2024.05.16 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!