아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

RLE 문자열 치환

시간 제한2초메모리 제한128 MB

요약
RLE로 인코딩된 문자열 A에서 B가 처음 등장하는 구간을 C로 바꾼 결과를 RLE 형태로 출력합니다.
난이도

보통10점 중 6점

유형
문자열 매칭, 투 포인터, 구현
정답자
아직 제출이 없습니다

문제

어떤 프로그래밍 언어의 소스 코드는 대문자 알파벳만으로 이루어지고, 같은 문자가 길게 이어지는 일이 많다. 그래서 아주 큰 소스 코드를 다룰 때는 런 렝스 부호화로 압축해서 보관한다.

런 렝스 부호화(RLE)는 같은 문자가 이어지는 극대 구간마다 그 문자와 구간의 길이를 한 쌍으로 적는 압축 방식이다. 예를 들어 문자열 RRRRLEEE는 RLE로 R4L1E3이 된다.

RLE로 압축된 문자열 AA, BB, CC가 주어진다. AA의 부분 문자열로 BB가 처음 나타나는 곳을 CC로 바꾼 문자열을 RLE로 출력하는 프로그램을 작성하라. AA에 BB가 나타나지 않으면 AA를 그대로 RLE로 출력한다.

입력

입력은 세 줄이다.

A
B
C

세 줄은 RLE로 압축된 문자열 AA, BB, CC를 차례로 나타내고, 각 줄의 형식은 다음과 같다.

c1 l1 c2 l2 ... cn ln $

cic_i (1≤i≤n1 \le i \le n)는 대문자 알파벳(A부터 Z)이고, lil_i (1≤i≤n1 \le i \le n, 1≤li≤1081 \le l_i \le 10^8)는 문자 cic_i가 이어지는 길이를 나타내는 정수다. 쌍의 개수 nn은 1≤n≤1031 \le n \le 10^3을 만족한다. 문자와 정수는 공백 하나로 구분되고, 줄의 끝에는 종료 기호 $가 온다. 1≤i≤n−11 \le i \le n-1을 만족하는 모든 ii에 대해 ci≠ci+1c_i \neq c_{i+1}이 성립한다.

출력

AA에 BB가 나타나면 처음 나타나는 BB를 CC로 바꾼 문자열을, 나타나지 않으면 AA를 그대로 RLE로 압축해 다음 형식으로 한 줄에 출력한다.

c1 l1 c2 l2 ... cm lm $

1≤i≤m−11 \le i \le m-1에 대해 ci≠ci+1c_i \neq c_{i+1}이어야 하고, 1≤i≤m1 \le i \le m에 대해 li>0l_i > 0이어야 한다.

예제2

  1. 예제 1

    입력
    R 100 L 20 E 10 $
    R 5 L 10 $
    X 20 $
    
    예상 출력
    R 95 X 20 L 10 E 10 $
    
  2. 예제 2

    입력
    A 3 B 3 A 3 $
    A 1 B 3 A 1 $
    A 2 $
    
    예상 출력
    A 6 $