[문제 설명]
문자열 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"]


[입출력 예 설명]
입출력 예 #1)
"abc1Addfggg4556b" 를 길이 6씩 잘라 배열에 저장한 ["abc1Ad", "dfggg4", "556b"]를 return해야 합니다.
입출력 예 #2)
"abcdef123" 를 길이 3씩 잘라 배열에 저장한 ["abc", "def", "123"]를 return해야 합니다.


[나의 풀이]

def solution(my_str, n):
  answer = []
  for i in range(0, len(my_str)+1, n):
    answer.append(my_str[i:i+n])
  return list(filter(None,answer))

# 설명

> 위의 함수에서 filter를 하지 않으면 아래와 같이 빈 문자열이 나온다.

my_str = "asdfghjkqw"
n = 2

# filter 안하면 빈 문자열 나옴
answer = []
for i in range(0, len(my_str)+1, n):
  answer.append(my_str[i:i+n])
answer

Out[1]:

['as', 'df', 'gh', 'jk', 'qw', '']

> '' 를 지우기 위해 list(filter(None, answer))를 하였다.

 

# 빈 문자열이 나온 이유

my_str = "asdfghjkqw"
n = 2

print(my_str.index('w'))
print(len(my_str))

Out[2]:

9        # 마지막 문자의 인덱스는 9

10      # 전제 길이는 10

 

[나의 풀이]에서 for문에 len(my_str)+1을 했기 때문에 빈 값이 나오는 것이다.

아래와 같이 작성하면

my_str = "asdfghjkqw"
n = 2

for i in range(0, len(my_str)+1, n):
  print(my_str[i])

Out[3]:

index의 범위를 벗어났다고 나온다.


[수정된 풀이]

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

> [나의 풀이]를 수정하면 위와 같다.

> 빈 문자열이 나오지 않으므로 filter를 하지 않아도 된다.


[다른 사람 풀이]

def solution(my_str, n):
    return [my_str[i: i + n] for i in range(0, len(my_str), n)]

> [수정된 풀이]를 두 줄로 완성하였다...ㄷㄷ

'Test > python' 카테고리의 다른 글

문자열 정렬하기 (2) (sorted() 사용)  (0) 2023.04.04
7의 개수 ( join, count )  (0) 2023.04.03
연속된 수의 합  (0) 2023.04.02
종이 자르기  (0) 2023.03.30
다음에 올 숫자  (0) 2023.03.28

+ Recent posts