Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 키패드 누르기
- 움직이는 미로 탈출
- 백준2573
- 백준 14499
- A와 B
- 백준5710
- 소수 만들기
- 단어 수학
- 프로그래머스
- 백준
- 경비원
- 백준12904
- 124 나라의 숫자
- Smart Commit
- 로또의 최고 순위와 최저 순위
- 백준 2564
- 부스트캠프
- 백준16234
- 백준16954
- 피보나치 수의 확장
- 백준1788
- 인구 이동
- 백준3190
- 백준1697
- 백준1339
- 파이썬
- 완주하지 못한 선수
- 코딩테스트
- 전기 요금
- 빙산
Archives
- Today
- Total
Today.dev
[BOJ_5710/Python] 전기 요금 본문
문제
5710번: 전기 요금
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 두 정수 A와 B가 주어진다. (1 ≤ A, B ≤ 109) 항상 정답이 유일한 경우만 주어지며, 입력으로 주어지
www.acmicpc.net
풀이
import sys
input = sys.stdin.readline
def get_wh_from_bill(bill):
arr = [100 * 2, 100 * 2 + 9900 * 3, 100 * 2 + 9900 * 3 + 990000 * 5]
if bill <= arr[0]:
return bill // 2
if bill <= arr[1]:
return 100 + (bill - arr[0]) // 3
if bill <= arr[2]:
return 10000 + (bill - arr[1]) // 5
return 1000000 + (bill - arr[2]) // 7
def get_bill_from_wh(wh):
arr = [100, 10000, 1000000]
if wh < arr[0]:
return wh * 2
if wh < arr[1]:
return 100 * 2 + (wh - 100) * 3
if wh < arr[2]:
return 100 * 2 + 9900 * 3 + (wh - 10000) * 5
return 100 * 2 + 9900 * 3 + 990000 * 5 + (wh - 1000000) * 7
def binary_search(start, end, target):
total_wh = end # (상근 + 이웃) 전기사용량
while True:
my_wh = (start + end) // 2 # 상근이 전기사용량
your_wh = total_wh - my_wh # 이웃 전기사용량
diff = get_bill_from_wh(your_wh) - get_bill_from_wh(my_wh)
if diff == B:
return get_bill_from_wh(my_wh)
if diff > B:
start = my_wh + 1
else:
end = my_wh - 1
while True:
A, B = map(int, input().split()) # 1 <= A, B <= 10^9
# 종료 조건
if A + B == 0:
break
# 1. 총 전기 사용량(Wh) 구하기
wh = get_wh_from_bill(A)
# 2. 상근이의 전기 사용량 구하기
print(binary_search(1, wh, B))
문제에서 주어진 조건(A, B)을 최대한 활용해서 풀었다. 개인적으로 이분 탐색을 반복할때마다 전기 사용량을 요금으로 바꿔서 비교하는 과정이 번거로워보여서 시간 초과가 나지 않을까 걱정했는데, 다행히 시간 초과 없이 통과할 수 있었다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ_16954/Python] 움직이는 미로 탈출 (0) | 2021.07.05 |
---|---|
[BOJ_3190/Python] 뱀 (0) | 2021.07.05 |
[BOJ_1697/Python] 숨바꼭질 (0) | 2021.07.05 |
[BOJ_14499/Python] 주사위 굴리기 (0) | 2021.07.05 |
[BOJ_1339/Python] 단어 수학 (0) | 2021.05.31 |
Comments