본문 바로가기
CodingTest

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

by 취업하고싶다! 2023. 10. 25.
 

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')

'CodingTest' 카테고리의 다른 글

SWEA - 파스칼의 삼각형(2005)  (0) 2023.10.27
SWEA - 쉬운 거스름돈(1970)  (1) 2023.10.27
SWEA - 두 개의 숫자열(1959)  (0) 2023.10.25
Programmers - 성격 유형 검사하기  (0) 2023.10.24
SWEA - 패턴 마디의 길이(2007)  (2) 2023.10.23