Python에서 책 페이지 매김 문제 이해하기
문자열로 이루어진 리스트 book이 있다고 가정해 보겠습니다. 여기서 페이지 번호(0부터 시작하는 인덱스)와 page_size가 주어지면, 해당 페이지에 포함된 단어들의 목록을 찾아야 합니다. 만약 요청한 페이지가 존재하지 않는 범위라면, 빈 리스트를 반환하면 됩니다.
예를 들어, 입력이 다음과 같다고 해봅시다.
- book = ["hello", "world", "programming", "language", "python", "c++", "java"]
- page = 1
- page_size = 3
이 경우 출력은 ['language', 'python', 'c++']가 됩니다.
해결 접근 방법
이 문제는 Python의 슬라이싱(slicing) 기능을 활용하면 아주 간단하게 해결할 수 있습니다. 단계별로 살펴보면 다음과 같습니다.
- 시작 인덱스
l을 계산합니다:l = page * page_size - 리스트 슬라이싱을 사용하여
book[l]부터book[l + page_size - 1]까지의 요소들을 반환합니다.
Python의 슬라이싱은 범위를 초과해도 오류 없이 처리되므로, 페이지가 유효 범위를 벗어나더라도 자동으로 빈 리스트가 반환된다는 장점이 있습니다. 별도의 예외 처리 코드가 필요하지 않은 것이죠.
구현 예제
class Solution: def solve(self, book, page, page_size): l = page * page_size return book[l:l+page_size] ob = Solution() book = ["hello", "world", "programming", "language", "python", "c++", "java"] page = 1 page_size = 3 print(ob.solve(book, page, page_size))
입력
["hello", "world", "programming", "language", "python", "c++", "java"], 1, 3
출력
['language', 'python', 'c++']
동작 원리 설명
위 예제에서 page = 1, page_size = 3이므로 시작 인덱스는 l = 1 × 3 = 3이 됩니다. 따라서 book[3:6]을 반환하게 되며, 이는 인덱스 3, 4, 5에 해당하는 'language', 'python', 'c++' 세 개의 단어입니다.
만약 page = 5처럼 책의 실제 크기를 벗어난 페이지를 요청하면, 시작 인덱스 l = 15가 되고 리스트 길이가 7이므로 슬라이싱 결과는 빈 리스트 []가 반환됩니다. 이렇게 조건 분기 없이 깔끔하게 요구 사항을 충족할 수 있습니다.