SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
<나의 풀이>
입력되는 각 알파벳 수를 통해 문자열들을 출력하는 문제라고 생각한다.
주어지는 알파벳이 대문자 A - Z이고, 최대 개수는 20개이다.
또한 친절하게 문자열의 길이를 10으로 정해줬다.
각 첫번째 줄은 테스트 케이스의 번호, 그리고 그다음 줄은 입력되는 알파벳 종류의 수로 보인다.
입력값을 먼저 세팅해보자.
T = int(input())
for i in range(1,T+1):
N = int(input())
print('#{}'.format(i))
이때 입력값이 (알파벳 숫자) 형식으로 N개 들어오기 때문에, 새로운 반복문으로 입력을 받아야 한다.
T = int(input())
for i in range(1,T+1):
N = int(input())
print('#{}'.format(i))
for j in range(N):
a , b = input().split()
이때 들어오는 값 a b는 모두 문자 타입이다.
우리가 출력할 것이 문자열이기 때문에 단순하게 생각하면 a를 b개 출력하면 된다.
따라서 다음과 같이 적을 수 있다.
L = a * int(b)
이것을 새로운 문자열 L에 저장하는데, 우리는 문자열이 10자리까지 가능하다.
따라서 10자리보다 크게 입력이 된다면,
혹은 10자리보다 적게 입력되고 다른 문자와 같이 작성해야 하는 등 여러 케이스들에 대해서 생각해봐야 한다.
따라서 조건문을 활용하자.
그런데 L = a * int(b)로 작성하면 문제가 생긴다.
이는 리스트 L이 반복문이 진행될 때마다 갱신되어 마지막 반복문 실행 입력값이 들어가는 것이다.
따라서 L에 추가를 하는 형식으로 바꿔야 한다.
L += a * int(b)
이러면 각 알파벳들이 입력된 수만큼 한 줄로 출력되는 것을 알 수 있다.
이제 여기서 우리는 길이를 활용하여 잘라주면 되겠다.
for j in range(len(L)):
if (j) % 10 != 0:
print(L[j],end='')
j가 0부터 입력되는데 길이 10을 기준으로 잘라야 하므로,
10으로 나눴을 때 나머지가 0인 경우는 다음 줄로 줄 바꿈 해야 한다.(잘라야 한다)
즉 다시 말하면 나머지가 0이 아닌 경우는 계속 이어서 쓰는 것이다.
줄 바꿈 없이 이어서 출력하려면 end=''를 사용하면 된다.
그런데 나눗셈에서 0이 분모가 될 수 없다.
출력은 L[0]부터하되 나누기 10은 길이 자체니깐 j+1로 시작 문자열의 자리를 1이라고 생각하면 된다.
따라서 이를 반영한 코드는 다음과 같다.
for j in range(len(L)):
if (j+1) % 10 != 0:
print(L[j],end='')
else :
print(L[j])
하지만 여기서 끝이 아닌 것이, 우리가 사용한 end=''때문에 각 케이스 별로 줄 바꿈 하는 것이 엉킨다.
따라서 for문 밖에서 print()를 통해 줄 바꿈 해주면 케이스를 구분할 수 있다.
이들을 모두 반영한 코드는 다음과 같다.
T = int(input())
for i in range(1,T+1):
N = int(input())
L = ''
print('#{}'.format(i))
for j in range(N):
a , b = input().split()
L += a * int(b)
for j in range(len(L)):
if (j+1) % 10 != 0:
print(L[j],end='')
else :
print(L[j])
print()
풀고 나니 쉬운 느낌이지만 시험에서 등장하면 헤맬 것 같은 문제였다.
이 문제뿐만 아니라 D2 문제들은 공부할 내용도 많고 마냥 쉽지는 않은 것 같다.
'개발 > SWEA (D2) 문제 풀이' 카테고리의 다른 글
SW Expert Academy - 1945. 간단한 소인수분해(D2) (0) | 2022.11.13 |
---|---|
SW Expert Academy - 1940. 가랏! RC카!(D2) (0) | 2022.11.13 |
SW Expert Academy - 1928. Base64 Decoder(D2) (0) | 2022.11.12 |
SW Expert Academy - 1288. 새로운 불면증 치료법(D2) (0) | 2022.11.12 |
SW Expert Academy - 1285. 아름이의 돌 던지기(D2) (0) | 2022.11.12 |
댓글