[백준][파이썬] 1654번 랜선 자르기

2022. 2. 9. 09:29·Python/알고리즘 문제풀이

백준 온라인저지 1654 랜선 자르기

문제풀러 바로가기👇👇👇👇👇👇

https://www.acmicpc.net/problem/1654


 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

 

 

 

 

문제풀이


이 문제는 이분탐색을 이용해야하는 문제이다.

start는 1로 잡고, 랜선 중 최대길이를 end로 정한 다음 이분 탐색을 하면 다음과 같다.

첫 번째 mid는 402cm이다. 402cm로 자르면 랜선이 5개 밖에 나오지 않기 때문에

mid를 mid = (start + mid - 1) // 2 로 조정해준다.

 

기준을 201cm로 랜선을 자르면 10개가 나오기 때문에 mid를 다시 조정해준다.

 

101cm로 자르면 랜선이 11개가 넘게 나온다. 일단 n값을 만족했기때문에 값을 저장해두고

start을 늘려서 최대값을 찾아준다.

위 과정을 반복하면 결국 아래의 결과가 나온다.

200cm일 때 랜선 11개도 만족하고 최대값인 조건도 만족한다.

이 논리를 코드로 구현하면 아래와 같다.

 

 

코드

import sys
input = sys.stdin.readline

k, n = map(int, input().split())
lan = []
for _ in range(k):
    lan.append(int(input()))

start = 1
end = max(lan)
result = 0

while start <= end:
    cnt = 0
    mid = (start + end) // 2

    for i in lan:
        cnt += (i // mid)

    if cnt >= n:
        result = mid
        start = mid + 1

    else:
        end = mid - 1

print(result)

 

*** 주의사항 ***

일반 이분탐색처럼 start를 0으로 설정하고 프로그램을 돌리면 런타임에러(ZeroDivisionError)가 발생한다.

 

 

*** 참고 - 런타임에러가 발생하는 경우 ***

  1. 배열에 할당된 크기를 넘어서 접근했을 때
  2. 전역 배열의 크기가 메모리 제한을 초과할 때
  3. 지역 배열의 크기가 스택 크기 제한을 넘어갈 때
  4. 0으로 나눌 떄
  5. 라이브러리에서 예외를 발생시켰을 때
  6. 재귀 호출이 너무 깊어질 때
  7. 이미 해제된 메모리를 또 참조할 때

**********************************************

'Python/알고리즘 문제풀이' 카테고리의 다른 글
  • [백준][파이썬] 7576번 토마토
  • [백준][파이썬] 9184번 신나는 함수 실행
  • [백준][파이썬] 10989번 수 정렬하기 3
  • [프로그래머스 연습문제] 124 나라의 숫자
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    Spring
    Git
    스프링
    GitHub
    운영체제
    오류해결
    자바스크립트
    java
    MySQL
    jsp
    자바
    파이썬
    Python
    웹개발
    os
    알고리즘
    부스트캠프 멤버십
    부스트캠프 7기
    스프링부트
    부스트캠프
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[백준][파이썬] 1654번 랜선 자르기
상단으로

티스토리툴바