코딩테스트 \파이썬\자바/SWEA D3

[SWEA][D3] 4676. 늘어지는 소리 만들기 D3 파이썬

익명의 신디 2020. 3. 11. 15:30

문제출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWRKWITqfvIDFAV8&categoryId=AWRKWITqfvIDFAV8&categoryType=CODE

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 - 띄여쓰여진채로 나옴.

따닥따닥 붙여서 나오는 방법으로 하나씩 붙여서 출력해봄