[백준] 2110번 공유기 설치 - python 파이썬 (이분탐색)

2025. 1. 22. 14:48·코딩테스트/백준

문제

 

 

 

 

사실 이 문제는 어떤 알고리즘을 써야 할지 전혀 감히 잡히지 않았던 문제였다.

 

구글링을 통해 이분탐색을 써야 된다는 걸 알게 됐지만 그래서 target이 뭔데....? 라는 생각만 들고 감이 안잡혔었다.

 

target이 명시적으로 딱 주어지지 않더라도 이것을 뽑아내는 능력을 좀 길러야 할 것 같다.

 

 

이분 탐색을 활용해 풀어보자면, 목표는 C개를 설치할 때의 간격(mid)의 최댓값을 찾는 것이다.

공유기 개수를 조정하면서 mid 값을 점점 키워가며 탐색한다.

탐색 과정에서 C개를 설치할 수 있으면 mid를 더 키워도 되는지 확인하기 위해 start = mid + 1을 진행한다.

반대로 C개를 설치할 수 없으면 간격이 너무 크다는 뜻이므로 end = mid - 1을 줄인다.

이 과정을 start <= end 동안 반복하며 최댓값을 갱신하므로, 마지막으로 저장된 mid가 C개를 설치할 수 있는 간격 중 최댓값이 된다.

 

 

 

 

정답코드

 

n, c = map(int, input().split())
homes = [int(input()) for _ in range(n)]
homes.sort()


start = 1
end = homes[-1] - homes[0]
ans = 0

while(start <= end):
    mid = (start + end) // 2
    now = homes[0]
    count = 1

    for i in range(1,len(homes)):
        #현재 구한 간격보다 크거나 같은 위치에 있는 집만 세면 현재 간격으로 몇개의 공유기를 설치할 수 있는 알 수 있음
        if homes[i] >= now + mid:
            count += 1
            now = homes[i]
    
    if count >= c:
        start = mid + 1
        ans = mid
    else:
        end = mid -1

print(ans)

 

 

 

 

이 문제의 가장 Key Point는 이 문제를 이분탐색으로 풀어야겠다는 생각과 이분탐색을 쓸 때 target을 어떤걸로 할 지를 생각해서 구현해내는 것이다.

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 9935번 문자열 폭발 -python 파이썬 (시간초과 해결)  (1) 2025.02.04
[백준] 2580번 스도쿠 - python파이썬 (백트래킹)  (1) 2025.01.23
[백준]1806번 부분합 - python 파이썬  (0) 2025.01.21
[백준]11054번 가장 긴 바이토닉 부분수열 - python파이썬  (2) 2025.01.15
[백준]14502번 연구소 BFS - python  (1) 2025.01.06
'코딩테스트/백준' 카테고리의 다른 글
  • [백준] 9935번 문자열 폭발 -python 파이썬 (시간초과 해결)
  • [백준] 2580번 스도쿠 - python파이썬 (백트래킹)
  • [백준]1806번 부분합 - python 파이썬
  • [백준]11054번 가장 긴 바이토닉 부분수열 - python파이썬
hiwon
hiwon
천천히 굴러가는 코딩일기
  • hiwon
    하이원의 코딩 일기
    hiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프론트엔드 (0)
        • react (0)
      • 백엔드 (13)
        • node.js (1)
        • spring (6)
      • 코딩테스트 (57)
        • 백준 (41)
        • 프로그래머스 (15)
      • 프로디지털아카데미 (9)
        • 클라우드 (1)
        • JavaScript (1)
      • github (1)
      • AWS (2)
      • Infra (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    MSA
    깃허브
    EC2
    신한투자증권
    IT기획
    spring
    UnionFind
    github
    bastion host
    알파코캠퍼스
    AWS
    BFS
    K디지털트레이닝
    Java
    프로디지털아카데미
    kdt교육
    백준
    코딩테스트
    프디아
    알고리즘
    파이썬
    그리디
    투포인터
    python
    코테
    백트래킹
    알파코
    프로그래머스
    백엔드
    다익스트라
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hiwon
[백준] 2110번 공유기 설치 - python 파이썬 (이분탐색)
상단으로

티스토리툴바