문자열 s와 정수 n이 주어졌을 때, s를 길이가 n인 조각들로 나누어야 하는 경우가 자주 있습니다.
예를 들어, 입력이 s = "abcdefghijklmn", n = 4라면 출력은 ['abcd', 'efgh', 'ijkl', 'mn']이 됩니다. 이때 마지막 조각은 남은 문자만 포함하기 때문에 길이가 n보다 짧을 수 있다는 점에 유의하세요.
해결 접근 방법
이 문제는 다음 단계를 따라 해결할 수 있습니다.
- 인덱스 변수 i를 0으로 초기화합니다.
- 결과를 저장할 빈 리스트 f를 생성합니다.
- i가 문자열의 길이보다 작은 동안 반복합니다.
- s[i]부터 s[i+n-1]까지의 부분 문자열(슬라이싱)을 f의 끝에 추가합니다.
- i를 n만큼 증가시킵니다.
- 반복이 끝나면 f를 반환합니다.
파이썬의 슬라이싱(slicing)은 인덱스가 문자열 범위를 벗어나도 오류 없이 자동으로 처리해 주기 때문에, 마지막 조각이 n보다 짧아도 안전하게 잘려 나옵니다.
구현 예제
class Solution:
def solve(self, s, n):
i = 0
f = []
while(i < len(s)):
f.append(s[i:i+n])
i += n
return(f)
ob = Solution()
print(ob.solve("abcdefghijklmn", 4))
입력
"abcdefghijklmn", 4
출력
['abcd', 'efgh', 'ijkl', 'mn']
더 간결한 방법: 리스트 컴프리헨션
같은 로직은 리스트 컴프리헨션(list comprehension)을 사용하면 한 줄로 표현할 수 있습니다.
def solve(s, n):
return [s[i:i+n] for i in range(0, len(s), n)]
print(solve("abcdefghijklmn", 4)) # ['abcd', 'efgh', 'ijkl', 'mn']
range(0, len(s), n)은 0부터 문자열 길이까지 n 간격으로 인덱스를 생성하므로, while 루프와 동일한 결과를 훨씬 간결하고 파이썬답게 얻을 수 있습니다. 실무에서는 가독성과 유지보수 측면에서 이 방식을 더 많이 사용합니다.