Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 책 페이지 매기기 구현하기

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이므로 슬라이싱 결과는 빈 리스트 []가 반환됩니다. 이렇게 조건 분기 없이 깔끔하게 요구 사항을 충족할 수 있습니다.