백준/문제
23746번: 문자열 압축 해제
스몰스테핑
2024. 9. 12. 13:31
문제 출처 : https://www.acmicpc.net/problem/23746
언어 : Kotlin
문제 설명 :
특정 소문자 문자열 패턴을 대문자 한 글자로 압축하는 프로그램 SPC(String Pattern Compressor)가 있다.
예를 들어, 다음과 같은 방법으로 압축하는 경우, “aabbaaac”는 “ABAC”로 압축된다.
소문자 문자열 패턴 | 대문자 |
aa | A |
bba | B |
c | C |
압축 프로그램과 압축된 문자열이 주어지면, 압축되기 전 문자열의 일부를 출력하는 프로그램을 작성하시오.
입력 :
첫 번째 줄에 압축 방법의 개수 N이 주어진다. (1 ≤ N ≤ 26)
두 번째 줄부터 N개의 줄에 소문자 문자열 패턴과 대응되는 대문자가 공백으로 구분되어 주어진다. 각 소문자 문자열 패턴의 길이는 1,000을 넘지 않으며, 같은 대문자는 두 번 이상 주어지지 않는다.
N+1번째 줄에 압축된 문자열이 주어진다. 압축된 문자열 길이는 1,000을 넘지 않는다.
마지막 줄에 두 정수 S와 E가 주어진다. (1 ≤ S ≤ E ≤ (압축되기 전 문자열 길이))
출력 :
압축되기 전 문자열의 S번째 문자에서 E번째 문자까지 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
3 aa A bba B c C ABAC 4 6 |
baa |
5 abcde A abcde B abcde C abcde D abcde E ABCDE 1 25 |
abcdeabcdeabcdeabcdeabcde |
4 e E f F g G h H EEEFEEE 4 5 |
fe |
풀이 :
import java.io.BufferedWriter
import java.io.OutputStreamWriter
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = readLine().toInt()
val map = mutableMapOf<Char, String>()
repeat(n) {
val (pattern, code) = readLine().split(" ")
map[code.toCharArray()[0]] = pattern
}
val zipWord = readLine()
val (s, e) = readLine().split(" ").map { it.toInt() }
val sb = StringBuilder()
zipWord.forEach { sb.append(map[it]) }
bw.write(sb.substring(s - 1 until e))
bw.flush()
bw.close()
}