별 무늬 압축 복원
의견: 0
별(\(*\))과 빈칸(\(.\))으로 이루어진 직사각형 무늬가 있다. 이 무늬는 \(R\)개의 행과 \(W\)개의 열로 이루어져 있다.
공간을 아끼기 위해, 무늬는 런 길이 부호화(run-length encoding) 방식으로 저장되어 있다. 즉 무늬의 모든 칸을 위에서 아래로, 각 행은 왼쪽에서 오른쪽으로 읽어 하나의 긴 기호 열로 늘어놓은 뒤, 같은 기호가 연속되는 구간을 \((\text{개수}, \text{기호})\) 쌍으로 묶어 \(K\)개의 쌍으로 기록한다. 이 쌍들의 개수를 모두 더하면 정확히 \(R \times W\) 가 된다.
단, 저장 과정에서 같은 기호의 구간이 여러 쌍으로 나뉘어 인접하게 기록되어 있을 수도 있고, 하나의 구간이 행의 경계를 넘어 다음 행까지 이어질 수도 있다.
\(K\)개의 쌍이 주어질 때, 원래의 \(R \times W\) 무늬를 복원하여 출력하는 프로그램을 작성하라.
예를 들어 \(R=4\), \(W=5\) 이고 쌍들을 풀어 이으면
\(..*...***.*****.***.\)
이 되는데, 이를 \(5\)글자마다 잘라 다음과 같이 복원한다.
..*..
.***.
*****
.***.
\(1 \le R,\; 1 \le W,\; R \times W \le 500{,}000\)
\(1 \le K \le 500{,}000\)
모든 쌍의 개수 \(c\) 의 합은 \(R \times W\) 와 같다.
첫째 줄에 두 정수 \(R\) 과 \(W\) (\(1 \le R, W\), \(R \times W \le 500{,}000\)) 가 주어진다.
둘째 줄에 쌍의 개수 \(K\) (\(1 \le K \le 500{,}000\)) 가 주어진다.
셋째 줄부터 \(K\)개의 줄에 각각 정수 \(c\) 와 문자 \(s\) 가 공백으로 구분되어 주어진다. \(c\) (\(1 \le c\)) 는 연속된 칸의 개수, \(s\) 는 그 칸들의 기호로 별을 뜻하는 * 또는 빈칸을 뜻하는 . 중 하나이다.
모든 \(c\) 의 합은 정확히 \(R \times W\) 이다.
복원된 무늬를 \(R\)개의 줄에 출력한다. 각 줄은 정확히 \(W\)개의 문자(* 또는 .)로 이루어진다.
4 5
9
2 .
1 *
3 .
3 *
1 .
5 *
1 .
3 *
1 .
..*..
.***.
*****
.***.
연속된 같은 기호를 (개수 기호) 쌍으로 풀어 한 줄로 이으면
........
이고, 이를 폭 \(W=5\) 마다 잘라 4개의 행으로 복원한다.
3 3
2
6 *
3 .
***
***
...
'*' 가 6개, '.' 가 3개로 인코딩된다. 첫 런(6개)이 행 경계를 넘어 두 행에 걸쳐 채워진다.
riseoj 작성
출처 Original
평가 및 의견
별 무늬 압축 복원
아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.
풀이 제출
별 무늬 압축 복원