문제
알고리즘
- 0층부터 256층까지 반복하여 블록을 확인한다.
- 블록이 층수보다 더 크면 그때의 개수를 더하고 블록의 층수보다 더 작으면 그때의 개수를 더한다.
- 블록을 뺀 것과 원래 있던 블록의 합과 블록을 더한 값을 비교한다.
- 블록을 뺀 것과 원래 있던 블록의 합이 더 커야 층을 만들 수 있다.
- 층을 만들 수 있다면 그때의 시간초를 구하고 최저 시간과 비교한다.
- 0부터 256층까지 비교하므로 업데이트될수록 고층의 최저 시간이 된다.
코드
import sys
n, m, b = map(int, sys.stdin.readline().split())
graph = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
answer = sys.maxsize
idx = 0
# 0층부터 256층까지 반복
for target in range(257):
max_target, min_target = 0, 0
# 반복문을 통해 블록을 확인
for i in range(n):
for j in range(m):
# 블록이 층수보다 더 크면
if graph[i][j] >= target:
max_target += graph[i][j] - target
# 블록이 층수보다 더 작으면
else:
min_target += target - graph[i][j]
# 블록을 뺀 것과 원래 있던 블록의 합과 블록을 더한 값을 비교
# 블록을 뺀 것과 원래 있던 블록의 합이 더 커야 층을 만들 수 있음.
if max_target + b >= min_target:
# 시간 초를 구하고 최저 시간과 비교
if min_target + (max_target * 2) <= answer:
# 0부터 256층까지 비교하므로 업데이트 될수록 고층의 최저시간
answer = min_target + (max_target * 2) # 최저 시간
idx = target # 층수
print(answer, idx)
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 14503번(파이썬): 로봇 청소기 (0) | 2022.05.05 |
---|---|
[baekjoon] 백준 15686번(파이썬): 치킨 배달 (0) | 2022.05.04 |
[baekjoon] 백준 1759번(파이썬): 암호 만들기 (0) | 2022.05.01 |
[baekjoon] 백준 14502번(파이썬): 연구소 (0) | 2022.04.30 |
[baekjoon] 백준 10989번(파이썬): 수 정렬하기 3 (0) | 2022.04.28 |