diff --git "a/BOJ/\354\230\210\354\202\260/sumin.py" "b/BOJ/\354\230\210\354\202\260/sumin.py"
new file mode 100644
index 00000000..4f7342ad
--- /dev/null
+++ "b/BOJ/\354\230\210\354\202\260/sumin.py"
@@ -0,0 +1,47 @@
+"""
+풀이시간 : 20분
+
+
+- n: 지방의 수(N은 3 이상 10,000)
+- 지방의 예산요청을 표현하는 N개의 정수(값들은 모두 1 이상 100,000 이하)
+- m: 총 예산(N 이상 1,000,000,000 이하)
+
+
+1) 이분 탐색을 통해 정수 상한액을 찾는다. (최적의 상한액을 찾기 위해 범위를 좁혀나가기)
+- 정수 상한액보다 더 많은 예산 요청을 한 경우 -> 해당 지방은 상한액을 배정한다.
+- 정수 상한액 이하의 예산 요청을 한 경우 -> 해당 지방은 요청 금액을 배정한다.
+
+2) 각 지방에 모두 예산을 배정한 후 left 또는 right를 조정해 가능한 최대의 총 예산을 사용하는 방법을 찾는다.
+- 배정한 예상의 총합이 총 예산보다 작거나 같면, left를 증가시켜 정수 상한액을 증가시킴으로써 배정할 예산의 총합을 더 키운다.
+- 배정한 예상의 총합이 총 예사보다 크다면, right를 증가시켜 정수 상한액을 줄이고 배정할 예산의 총합도 줄여준다.
+
+3) 최종적으로 배정된 예산들 중 최댓값(정수 상한액)인 정수를 출력한다.
+
+<시간복잡도>
+O(nlogn)
+"""
+import sys
+input = sys.stdin.readline
+
+
+n = int(input()) # 지방의 수
+cities = list(map(int, input().split())) # 각 지방의 예산 요청 금액
+budget = int(input()) # 총 예산
+
+
+left, right = 0, max(cities)
+while left <= right:
+ mid = (left+right) // 2 # 정수 상한액
+ tot = 0 # 배정한 예산의 총합
+ for city in cities:
+ if city > mid: # 1) 상한액 이상의 예산 요청을 한 경우
+ tot += mid # 상한액 배정
+ else: # 2) 상한액 이하의 예산 요청을 한 경우
+ tot += city # 요청한 금액
+ if tot <= budget: # 배정한 예산의 총합이 총 예산보다 적다면
+ left = mid + 1 # 정수 상한액을 증가시키기 -> 배정할 예산의 총합도 커짐
+ else: # 배정한 예산의 총합이 총 예산보다 크다면
+ right = mid - 1 # 정수 상한액을 줄이기 -> 배정할 예산의 총합도 줄어듬
+
+# 배정된 예산들 중 최댓값인 정수
+print(right)