[코딩 테스트 연습 입문] 잘라서 배열로 저장하기

2022. 12. 29. 12:18code/[프로그래머스] python

문제

문자열 my_str n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.

 

❗제한사항

  • 1 ≤ my_str의 길이 ≤ 100
  • 1 ≤ n  my_str의 길이
  • my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.

 

입출력 예

 

입출력 예 설명

입출력 예 #1

  • abc1Addfggg4556b" 를 길이 6씩 잘라 배열에 저장한 ["abc1Ad", "dfggg4", "556b"]를 return해야 합니다.

입출력 예 #2

  • "abcdef123" 를 길이 3씩 잘라 배열에 저장한 ["abc", "def", "123"]를 return해야 합니다.

 

유의사항

  • 입출력 예 #1의 경우 "abc1Addfggg4556b"를 길이 6씩 자르면 "abc1Ad", "dfggg4" 두개와 마지막 "556b"가 남습니다. 이런 경우 남은 문자열을 그대로 배열에 저장합니다.

 

✔풀이

def solution(my_str, n):
    answer = []

    my_list = list(my_str)
    
    for num in range(0,len(my_list),n):
        answer.append("".join(my_list[num:num+n]))

    return answer

📝설명

문자열 안의 개수를 len을 이용해서 계산한 후, for문으로 n개씩 잘라서 리스트 answer에 추가하도록 한다.

문자열의 개수를 세기 위해서 my_str을 list로 변환한 후에 my_list에 저장했다.

만약 my_str이 "1234", n이 2로 이루어져 있다면 my_list는 ["1", "2", "3", "4"]가 된다.

for문을 통해 반복범위는 (0,len(my_llist),n)으로 한다.

이렇게 되면 num이 0부터 시작하고 len(my_llist)에서 1을 뺀 수까지 n을 추가하면서 반복된다. 

 앞선 예시에서 생각하자면, my_list의 len은 4가 되면서 for문의 반복범위는 (0,4,2)가 되면서 for문에서 num으로 불러지는 건 0, 0+2 이렇게 두 번이 불러진다. 

다음 answer에 n개의 문자로 묶인 문자열을 생성해서 추가해야 한다.

여기서 우선, my_list[num:num+n]만큼 슬라이싱을 한다. 

처음엔 num이 0이니까, my_list[0:2]가 되고, 이 때 my_list의 인덱스 넘버가 0부터 2까지, 즉 인덱스 넘버 0인 1과 인덱스 넘버 1인 2의 값만 잘려져서 ["1", "2"]와 같다. 

이렇게 자른 리스트 형태를 그대로 answer에 추가해서는 안된다. 

문제의 결과를 보면 큰따옴표로 둘러싸인 문자열이니까, 리스트를 문자열로 바꿔줘야 한다.

리스트를 문자열로 바꿔주기 위해서 "".join()를 쓰면 "12"와 같이 붙여지게 된다.

이걸 리스트에 추가해야 하기 때문에, append를 사용하면 된다! 

 

👑모범 답안

🔎리스트로 바꾸지 않아도.. 되는 거였네...ㅎㅎ...

 

👀느낀 점

: 역시 해결하고 나서도 다시 풀어봐야 한다.

 

💻 문제 출처

코딩테스트 연습 - 잘라서 배열로 저장하기 | 프로그래머스 스쿨 (programmers.co.kr)