CodingTest

SWEA - 간단한 압축풀기(1946)

취업하고싶다! 2023. 10. 25. 16:19
 

SW Expert Academy

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

swexpertacademy.com

 

 

문제

원본 문서는 너비가 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으로 고정이다.

 

 

접근방식

현재 값을 받을 배열 arr와 답을 저장해놓을 ans_arr를 빈 배열로 선언

테스트 케이스의 수 만큼 j를 인수로 for문을 돌면서 변수 2개 aplha, num을 입력받고 num을 Int로 바꿔줌

 

그리고 num만큼 k를 인수로 for문을 돌면서 arr의 길이가 10보다 작으면 arr에 alpha를 할당

만약 10이면 new_val이라는 변수에 arr에 있는 alpha들을 join() 메서드를 통해 합쳐서 할당하고 ans_arr에 이 new_val을 append함

그리고 arr는 빈 배열로 초기화해줌

한 줄에 10개씩 문자가 나와야하므로 이렇게해주면 배열의 길이가 10개가 되면 새로운 배열에 그 값을 저장하고 현재 값을 입력받는 배열을 초기화해줌으로써 구현 가능함

 

그 밑에 arr.append(alpha)를 해주는 이유는 해당 조건들이 for문안에서 돌기때문인데 예를 들어서 입력으로 A 10, B 7이 들어왔으면 A를 10번 돌동안 arr에는 ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',]이 됨. 하지만 해당 조건은 len(arr) < 10일 때 충족된 조건임. 따라서 이제 B 7 이 조건이 수행되어야하는데 첫 for문에서 len(arr)가 10이므로 else 문으로 빠지게 됨. 7번만큼 for문을 돌아야하는데 else문의 조건을 수행하게 되므로 해당 수식이 없으면 k = 0일 때 B 문자를 arr에 더해주지 못함. 따라서 arr.append(alpha)를 통해 문자를 하나 더해주는 식을 적어줌

 

그리고 모든 for문을 다 돌고나서 arr에 남아있는 문자열들을 join() 메서드를 통해 합쳐서 remain_val에 할당해주고 이 값도 ans_arr에 append해결

 

 

 

코드

T = int(input())
for i in range(1, T+1):
    tc = int(input())
    arr = []
    ans_arr = []
    for j in range(tc):
        alpha, num = map(str, input().split())
        num = int(num)
        
        for k in range(num):
            if len(arr) < 10:
                arr.append(alpha)
            else:
                new_val = ''.join(arr)
                ans_arr.append(new_val)
                arr = []
                arr.append(alpha)
    remain_val = ''.join(arr)
    ans_arr.append(remain_val)
    print("#"+str(i), *ans_arr, sep='\n')