Test/Python(20220101~)

프로그래머스.L0.잘라서배열로저장하기

kiostory 2022. 10. 8. 23:20

문제 설명

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


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

 

입출력 예
my_str  :  n  :  result
"abc1Addfggg4556b" 6 ["abc1Ad", "dfggg4", "556b"]
"abcdef123" 3 ["abc", "def", "123"]

 

* 첫 번째 생각

def solution(my_str, n):
    import math
    answer = []
    for _ in range(math.ceil(len(my_str)/n)):
        answer.append(my_str[:n])
        my_str = my_str[n:] 
    return answer

- 문자열을 n으로 나누어서 몇 번 잘라야 하는지 계산 (반올림을 위해 math 모듈의 ceil 사용

 

cf. math 모듈이 꼭 필요한걸까

 

* 두 번째 생각

math 모듈없이 작성

def solution(my_str, n):
    answer = []
    for _ in range(0, len(my_str), n):
        answer.append(my_str[:n])
        my_str = my_str[n:] 
    return answer

 

range(start, stop, step)

 

for _ in range(len(my_str)//n) 

  >> 이 경우 몫만 취하게 되므로 16문자열을 6개씩 나누면 2쩜 얼마의 목이라 스탑값이 2  (0,1)

  >> 0-5, 6-11 다음의 12-15까지의 문자를 반영하지 않아 실패

 

for _ in range(math.ceil(len(my_str)/n))

  >>  나눈 값의 소수점 값을 올림 해버려서 12-15까지의 문자를 반영하게 했으나, math 함수와 ceil(올림)을 모르면 불가하므로 패스

 

for _ in range(0, len(my_str), n)

  >>  스텝값을 넣어서 16문자열이고 6개씩일 경우 0,6,12 세 번동안 for문은 돌고

         도는 동안 6개씩 취하고

         처리할 문자열을 앞 6개씩 제외하고 끝까지 재정의하도록 함