RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R01547

별 무늬 압축 복원

Silver II 실버 II
난이도
2s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
0
제출 수
0.0%
정답률
레이팅

의견: 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\)개의 문자(* 또는 .)로 이루어진다.

예제 1
입력
4 5
9
2 .
1 *
3 .
3 *
1 .
5 *
1 .
3 *
1 .
출력
..*..
.***.
*****
.***.
설명

연속된 같은 기호를 (개수 기호) 쌍으로 풀어 한 줄로 이으면
........
이고, 이를 폭 \(W=5\) 마다 잘라 4개의 행으로 복원한다.

예제 2
입력
3 3
2
6 *
3 .
출력
***
***
...
설명

'*' 가 6개, '.' 가 3개로 인코딩된다. 첫 런(6개)이 행 경계를 넘어 두 행에 걸쳐 채워진다.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

별 무늬 압축 복원

개요
출제자 난이도 Silver II 실버 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

별 무늬 압축 복원

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8