Stay Hungry Stay Foolish

SWEA

[SWEA] 1946. 간단한 압축 풀기 (Python/D2)

dev스카이 2023. 11. 9. 18:59
 

SW Expert Academy

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

swexpertacademy.com


설명

원본 문서의 너비가 10이고, 알파벳의 연속된 개수로 이루어져 있다. 압축된 문서 내용은 알파벳과 숫자로 구성되어 있고, 압축을 풀었을 때 그 개수대로 문서의 너비에 맞게 출력되야 한다.

 

[예제]
압축된 문서의 내용
A 10
B 7
C 5

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

 

풀이

단순 구현
1. 문자형으로 입력받고 정수는 정수형으로 치환
2. 한 리스트에 알파벳을 모두 저장, 알파벳과 정수를 곱해서 리스트에 더한다.

3. for문으로 리스트에서 하나씩 꺼낸다. 

4. 알파벳을 같은 줄에 공백을 제외하고 출력하고 카운트를 더한다.

5. 만약 카운트가 10 이상이 되면 카운트 변수를 초기화 시키고 다음 줄로 넘어가게 한다

 

Solution

t = int(input())

for i in range(1, t+1):
    n = int(input())
    alpha_list = [] #알파벳을 한 곳에 저장할 리스트, alpha_list = ''라고 해도 됨
    for _ in range(n):
        alpha, num = input().split() #정수는 정수형으로 변환 필요
        alpha_list += alpha*int(num) #AAAAAAAAAABBBBBBBCCCCC
    cnt = 1
    print('#'+str(i))
    for ans in alpha_list:
        print(ans, end='') #예제 출력 주의
        cnt += 1
        if cnt > 10: 
            print()
            cnt = 1
    print() #추가

 

다른 풀이

t = int(input())
for tc in range(t, 1+t):
    n = int(input())
    document = ''
    for _ in range(n):
        word, number = input().split()
        document += word*int(number)

    print('#{}'.format(tc))

    for i in range(0, len(document), 10): #10 단위로 반복
        print(document[i:i+10]) #문자열에서 10개씩만 출력하게 함

👩‍💻 회고

졸린 상태로 풀어서인지 1시간이 지나도록 풀리지 않아서 다른 날에 다시 풀었더니 풀렸다!

문자와 정수를 같이 입력받는 것부터 문제였는데 나중에 정수형으로 변환하는 방법을 생각못해서 문제가 어렵게 풀렸다. 또한 리스트에 저장하는 방법도 이상했고 이중 리스트까지 만들어서 풀려고 했으나 안 풀렸다. 졸렸던 탓이라고 하자. ㅎ

 

오늘 풀었을 때는 방법을 다르게 했다. 한 리스트에 모두 저장하고 10개씩 끊어서 출력하게 했다. 이렇게 푸니 좀 더 간결하고 수월했다. 그러나 4차 제출에서야 성공했다..

2차 제출 때, 댓글에 개행 문자 때문이라는 말 때문에 input()옆에 strip()를 추가했지만 2차도 실패했다.

3차 제출 때, 문제를 보니 테스트 케이스가 여러 개 일 때 첫 번째 결과를 출력하고, 다음 줄로 넘어가서 입력을 받아야 하는데 같은 줄에 이어서 입력을 받게 해서 마지막에 print()를 추가했다. 하지만 3차 역시 실패했다. 

4차 제출 때, 확실한 문제점을 인지하게 됐다. 예제 출력을 보니 문자열이 모두 붙어있었다! 버릇처럼 공백 기준으로 분리하면서 출력하게 했었다.. 그래서 end = ' ' 에서 end = '' 이렇게 바꿨더니 드디어 성공했다!!

 

여기서 느꼈던 건, 피곤한 상태로 문제를 풀면 쉬운 문제도 안 풀리게 된다는 것. 그리고 문제를 이해하는 것도 중요하지만 입출력 조건도 확실하게 보고 넘어가자는 것이다.