새소식

⌨️ Algorithms/백준

[Python] 백준 23746번_문자열 압축 해제

2023. 3. 18. 20:47

  • -

https://www.acmicpc.net/problem/23746

 

23746번: 문자열 압축 해제

특정 소문자 문자열 패턴을 대문자 한 글자로 압축하는 프로그램 SPC(String Pattern Compressor)가 있다. 예를 들어, 다음과 같은 방법으로 압축하는 경우, “$\text{aabbaaac}$”는 “$\text{ABAC}$”로 압축된

www.acmicpc.net

 

  • 특정 소문자 문자열 패턴을 대문자 한 글자로 압축하는 프로그램 SPC(String Pattern Compressor)가 있음
  • 예를 들어, 아래 이미지와 같은 방법으로 압축하는 경우, “aabbaaac”는 “ABAC”로 압축됨
  • 압축 프로그램과 압축된 문자열이 주어지면, 압축되기 전 문자열의 일부를 출력하기

 

  •  입력
    • 첫 번째 줄에 압축 방법의 개수 N이 주어짐 (1≤N≤26)
    • 두 번째 줄부터 N개의 줄에 소문자 문자열 패턴과 대응되는 대문자가 공백으로 구분되어 주어짐
    • 각 소문자 문자열 패턴의 길이는 1000을 넘지 않으며, 같은 대문자는 두 번 이상 주어지지 않음
    • N+1번째 줄에 압축된 문자열이 주어짐
    • 압축된 문자열 길이는 1000을 넘지 않음
    • 마지막 줄에 두 정수 S와 E가 주어짐 (1≤S≤E≤ (압축되기 전 문자열 길이))
  • 출력
    • 압축되기 전 문자열의 S번째 문자에서 E번째 문자까지 출력
  • 시간 제한: 1초
  • 메모리 제한: 1024 MB

 

"""
입출력 예시)

(예제 입력 1) 
3
aa A
bba B
c C
ABAC
4 6
        -> baa

(예제 입력 2)
5
abcde A
abcde B
abcde C
abcde D
abcde E
ABCDE
1 25
        -> abcdeabcdeabcdeabcdeabcde

(예제 입력 3)
4
e E
f F
g G
h H
EEEFEEE
4 5
        -> fe
"""

 

# (예제 입력 1) 
# 압축되기 전 문자열: aabbaaac
# => 출력: baa

# (예제 입력 2) 
# 압축되기 전 문자열: abcdeabcdeabcdeabcdeabcde
# => 출력: abcdeabcdeabcdeabcdeabcde

# (예제 입력 3) 
# 압축되기 전 문자열: eeefeee
# => 출력: fe

 

 

## 의사코드 ##

# 압축 방법을 담기 -> dict ({'대문자': '소문자 문자열 패턴'})

# 압축되기 전 문자열
# before = "" 
# for chr in str:
      # 대문자를 소문자 문자열 패턴으로 변환
#     before += dic[chr] 
# 압축되기 전 문자열의 s번째 문자부터 e번째 문자까지 출력
# print(before[s-1:e])

 

 

 

통과한 코드

 

n = int(input()) # 압축 방법의 개수
dic = {} # 압축 방법을 담을 딕셔너리 ({'대문자': '소문자 문자열 패턴'})
for _ in range(n):
    low, up = input().split()
    dic[up] = low 

str = input() # 압축된 문자열
s, e = map(int, input().split()) 

before = "" # 압축되기 전 문자열
for chr in str:
    # 대문자를 소문자 문자열 패턴으로 변환
    before += dic[chr]

# 압축되기 전 문자열의 s번째 문자부터 e번째 문자까지 출력
print(before[s-1:e])

 

-> 압축되기 전 문자열의 s번째 문자부터 e번째 문자까지 출력하려면 [s-1:e] 라고 해야 하는 것 주의!

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!