김호쭈
DevForYou
김호쭈
전체 방문자
오늘
어제
  • 분류 전체보기 (321)
    • • 데이터베이스(DB) (9)
      • __SQL__ (9)
    • •알고리즘(Algorithm ) (117)
      • 문제풀이 (99)
      • 스터디 (14)
      • 알고리즘 팁 (4)
    • •Compter Science (57)
      • Operating System (25)
      • Computer Network (1)
      • Computer Vision (16)
      • Artificial Intelligence (14)
      • Software Technology (1)
    • • 독서 (36)
      • Design Pattern (24)
      • 객체지향의 사실과 오해 (1)
      • Object Oriented Software En.. (11)
    • • 개발 (26)
      • React (3)
      • node.js (6)
      • Django (11)
      • Spring boot (6)
    • • 개발Tip (4)
      • GitHub (0)
    • •프로젝트 (2)
      • 물물 (2)
    • •App (54)
      • 안드로이드 with Kotlin (50)
      • 코틀린(Kotiln) (4)
    • •회고 (8)
    • •취준일기 (3)
    • • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • local저장소
  • GitHubDesktop
  • 로컬저장소
  • 깃허브데스크탑
  • ㄱ
  • 원격저장소
  • Remote저장소
  • KMU_WINK

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김호쭈

DevForYou

[백준2512&파이썬] 이분탐색은 YES or NO인지 묻는 것이다.
•알고리즘(Algorithm )/문제풀이

[백준2512&파이썬] 이분탐색은 YES or NO인지 묻는 것이다.

2023. 4. 28. 23:01

# 문제

백준 2512 예산 파이썬 풀이

 

2512번: 예산

첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상

www.acmicpc.net

# 코드

import sys

N = int(sys.stdin.readline()) # 지방의 수
cites = list(map(int,sys.stdin.readline().split()))
MAX = int(sys.stdin.readline()) # 최대 예산

left = 1
right = max(cites) # MAX 잡았었는데 틀렸음. 예산이 도시에 들어가는 것보다 작을 수 있음

result = -1
while left <= right :
  mid = (left + right) // 2

  used_money = 0
  for city in cites :
    if mid <= city :
      used_money += mid
    else :
      used_money += city

  if MAX < used_money : # 돈을 더 많이 쓴 경우
    right = mid - 1
  else :
    # MAX > used_money
    left = mid + 1
    result = mid

print(result)

# 풀이

  • 이분탐색을 이용해서 풀 수 있다. 이분탐색을 풀이에 적용할때는 이분탐색을 진행하면서 나오는 mid값이 후보가 되어, mid를 사용해서 문제의 조건을 계산했을때 이것을 만족하나 안하나 (YES / NO )의 여부로 생각하면 쉽다.
  • 위 문제에서도 이분탐색으로 뽑은 mid가 예산의 후보가 된다. 해당 값으로 계산 했을때 예산을 초과한다면 예산을 늘려주고, 예산을 초과하지 않는다면 예산을 줄여줘서 최적의 값을 찾아가는 형식이다.
  • 이분탐색은 상상외로 빠르다. log N 이기 때문에 10억의 값이 있더라도 30번이면 정답을 찾을 수 있다.
저작자표시 (새창열림)

'•알고리즘(Algorithm ) > 문제풀이' 카테고리의 다른 글

[백준15686&파이썬] 조합을 이용해 브루트포스(완전탐색)해결하기  (0) 2023.04.29
[백준2294&파이썬] DP를 이용하여 동전교환문제를 해결하기, DP는 값을 재활용한다.  (0) 2023.04.28
[백준1939&파이썬] 이진탐색 BFS에 응용하기, 이진탐색 경계값 설정에 주의하자.  (0) 2023.04.27
[백준16236&파이썬] BFS을 작은단위로 쪼개 생각하자. 종료조건과 탐색조건을 잘 생각하자.  (0) 2023.04.26
[백준6497&파이썬] 크루스칼은 최소신장트리를 구할 수 있다.  (0) 2023.04.26
    '•알고리즘(Algorithm )/문제풀이' 카테고리의 다른 글
    • [백준15686&파이썬] 조합을 이용해 브루트포스(완전탐색)해결하기
    • [백준2294&파이썬] DP를 이용하여 동전교환문제를 해결하기, DP는 값을 재활용한다.
    • [백준1939&파이썬] 이진탐색 BFS에 응용하기, 이진탐색 경계값 설정에 주의하자.
    • [백준16236&파이썬] BFS을 작은단위로 쪼개 생각하자. 종료조건과 탐색조건을 잘 생각하자.
    김호쭈
    김호쭈
    공부하고 정리하고 기록하기

    티스토리툴바