관리 메뉴

솜씨좋은장씨

[BaekJoon] 4821번 : 페이지 세기 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 4821번 : 페이지 세기 (Python)

솜씨좋은장씨 2022. 5. 17. 21:42
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 페이지 세기 입니다.

 

4821번: 페이지 세기

워드, 한글, 메모장과 같은 워드 프로세서에서 인쇄를 할 때, 페이지 범위를 직접 입력하여 지정할 수 있다. 예를 들면, 다음과 같이 입력할 수 있다. 10-15,25-28,8-4,13-20,9,8-8 사용자는 위처럼 인쇄

www.acmicpc.net

👨🏻‍💻 문제 풀이

쉬워보여서 풀기 시작했는데 대충 풀었더니 IndexError 가 자꾸 발생했던 문제입니다.

IndexError는 주어지는 페이지가 책의 전체 페이지보다 더 큰 수가 주어지는 것에 대해서

예외 처리가 제대로 되지 않았기 때문에 발생했습니다.

문제를 풀면서 계속 IndexError가 발생한다면

- 내가 현재 참조하는 리스트보다 큰 값을 인덱스 값으로 쓰고 있지는 않은지?

- 예외처리를 확실히 다 했는지? 

확인해보시기 바랍니다.

 

이 문제는 입력 받은 전체 페이지만큼의 0이 담긴 배열을 만들고

입력받은 페이지 정보를 인덱스로 삼아 해당 부분에 1을 넣은 뒤 

마지막에 sum을 활용해 전체 페이지가 자연스럽게 카운팅 되도록 하였습니다.

 

전체 코드는 아래를 참고해주세요.

👨🏻‍💻 코드 ( Solution )

def counting_pages(total_page_num, input_page_info):
    pages = [0 for _ in range(total_page_num + 1)]
    
    page_info_list = input_page_info.split(",")
    
    for page_info in page_info_list:
        info = page_info.split("-")
        
        if len(info) == 1 or len(set(info)) == 1:
            if int(info[0]) < len(pages):
                pages[int(info[0])] = 1
        else:
            min_page, max_page = map(int, info)
            
            if (min_page > max_page) or (min_page > total_page_num):
                continue
            else:
                for page in range(min_page, max_page+1):
                    if page < len(pages):
                        pages[page] = 1
                    
    return sum(pages)


if __name__ == "__main__":
    while True:
        total_page = int(input())
        
        if total_page == 0:
            break
            
        input_page_info = input()
        
        print(counting_pages(total_page, input_page_info))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments