[SWEA][D3] 4676. 늘어지는 소리 만들기 D3 파이썬
문제출처 |
4676. 늘어지는 소리 만들기 D3 파이썬
단어의 중간에 ‘-’(하이픈)을 넣어 늘어지는 소리를 표현해보자.
예를 들어 “wow”같은 문자열에서 두 번째 문자 ‘o’의 뒤편에 두 개의 하이픈을, 세 번째 문자 ‘w’의 뒤편에 한 개의 하이픈을 넣는다고 해보자. 그러면 문자열은 “wo--w-“가 될 것이다.
알파벳 소문자로 이루어진 문자열과 어떤 문자의 뒤편에 하이픈을 넣을 지 여부가 주어질 때 하이픈을 모두 넣고 나면 문자열이 어떻게 되는지 출력하는 프로그램을 작성하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 T(T ≤ 1000)가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 길이가 1이상 20이하인 문자열이 주어진다. 이 문자열은 알파벳 소문자만으로 이루어져 있다. 이 문자열의 길이를 L이라고 하자.
두 번째 줄에는 몇 개의 하이픈을 넣을지를 의미하는 자연수 H(1 ≤ H ≤ 100)이 주어진다.
세 번째 줄에는 하이픈을 넣을 위치를 의미하는 H개의 0이상 L이하인 정수가 공백으로 구분되어 주어진다.
예를 들어 주어진 문자열이 “abc”이고 하이픈을 넣을 위치가 0이라면 “-abc”가 되고, 문자열이 “abc”이고 하이픈을 넣을 위치가 2이라면 “ab-c“가 된다.
2 wow 3 2 3 2 hoi 3 0 0 0 |
[출력]
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 주어진 문자열에 하이픈을 넣어서 출력한다.
#1 wo--w- #2 ---hoi |
<PASS>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 4676. 늘어지는 소리 만들기 D3
# 2020.03.11
for tc in range(1,int(input())+1):
sound = list(input()) # str 로 받지 않고 배열로 받음
n = int(input())
arr = list(map(int,input().split()))
arr.sort(reverse=True) # 출력 형태를 봤을 때 큰 인덱스부터 반영해야 됨
for i in arr:
sound.insert(i,'-') # append랑 insert는 str 인덱스로 안됨. 배열은 됨
# print(*sound) # 배열요소들이 띄여쓰기로 출력됨 NG...
print(f'#{tc}',end=' ')
for j in sound: # 배열요소를 붙여서 출력하기 위해
print(j,end='')
print()
|
<구조>
출력에서 문자열 사이에 하이픈이 들어가는 것을 보고
인덱스로 그 위치에 딱 넣어주는 insert 함수가 생각나서 해보니
AttributeError: 'str' object has no attribute 'insert'
시도1 : 띠용. 그러면 처음에(6번째줄) 문자열을 str('wow') 말고 배열 리스트로 받자 ['w', 'o', 'w']
시도2 : ['w', 'o', '-', '-', '-', 'w'] 로 넣어지는걸 보고 다시 보니
넣어지는 위치가 3부터 그 위치에 '-' 넣고 2 두 개를 그다음에 '-' 넣어져야 원하는 형태가 된 것 같아
(8번째줄) .sort(reverse=True) 역으로 바꿈
시도3 : print(*sound) 로 하니 w o - - w - 띄여쓰여진채로 나옴.
따닥따닥 붙여서 나오는 방법으로 하나씩 붙여서 출력해봄
끝