코딩테스트/SWExpertAcademy

간단한 압축풀기 C++(SW Expert Academy)

멍토 2020. 2. 13.

난이도 : D2

문제번호 : 1946

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PmkDKAOMDFAUq&categoryId=AV5PmkDKAOMDFAUq&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

원본 문서는 너비가 10인 여러 줄의 문자열로 이루어져 있다.

문자열은 마지막 줄을 제외하고 빈 공간 없이 알파벳으로 채워져 있고 마지막 줄은 왼쪽부터 채워져 있다.

이 문서를 압축한 문서는 알파벳과 그 알파벳의 연속된 개수로 이루어진 쌍들이 나열되어 있다. (예 : A 5    AAAAA)

압축된 문서를 입력 받아 원본 문서를 만드는 프로그램을 작성하시오.

예제

압축된 문서의 내용

A 10
B 7
C 5


압축을 풀었을 때 원본 문서의 내용

AAAAAAAAAA
BBBBBBBCCC
CC

제약사항

1. 압축된 문서의 알파벳과 숫자 쌍의 개수 N은1이상 10이하의 정수이다. (1 ≤ N ≤ 10)

2. 주어지는 알파벳 Ci는 A~Z의 대문자이다. (i는 줄의 번호로 1~N까지의 수)

3. 알파벳의 연속된 개수로 주어지는 수 Ki는 1이상 20이하의 정수이다. (1 ≤ Ki ≤ 20, i는 줄의 번호로 1~N까지의 수)

4. 원본 문서의 너비는 10으로 고정이다.

입력

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스에는 N이 주어지고 다음 줄부터 N+1줄까지 Ci와 Ki가 빈 칸을 사이에 두고 주어진다.

출력

각 줄은 '#t'로 시작하고, 다음 줄부터 원본 문서를 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

예시

입력 출력

1
3
A 10
B 7
C 5

#1
AAAAAAAAAA
BBBBBBBCCC
CC

2. 문제풀이

간단하게 접근하여 풀 수 있습니다.

입력받은 문자를 반복하여 출력하는데

10개가 될때마다 한줄씩 개행해주면 풀 수 있습니다.

 


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
//1946 D2 간단한 압축풀기
int main() {
    //전체 반복횟수
    int len;
    cin >> len;
    for (int l = 1; l <= len; l++) {
        int num, s_cnt=0, n_count;
        string str;
        cin >> num;
        cout << "#" << l << endl;
        //A~Z까지 입력받기
        for (int i = 0; i < num; i++) {
            cin >> str >> n_count;
            //압축된 횟수만큼 반복
            for (int j = 0; j < n_count; j++) {
                //10회마다 줄내림
                if (s_cnt / 10) {
                    cout << endl;
                    s_cnt %= 10;
                }
                cout << str;
                s_cnt++;
            }
        }
        cout << endl;
    }
    return 0;
}

댓글

💲 광고입니다.