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