백준|18111번|마인크래프트

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
56/136

문제설명
마이크래프트 게임에서 지형의 크기와 높이, 그리고 가지고 있는 블록의 개수를 입력받고 지형의 높이가 모두 같아지게 만듭니다. 이 때 가장 빨리 완성할 수 있는 시간과 그 때의 높이를 구하는 문제입니다.

작동 순서
1. 지형의 크기와 가진 블록의 개수를 입력받습니다.( 지형의 크기는 M*N)
2. 현재 지형의 가장 낮은 높이에서부터 가장 높은 높이까지 수행하는 반복문을 생성합니다.
3. 지형을 모두 같은 높이로 만들고 현재 위치의 높이가 목표보다 높은 경우 인벤토리에 남는 블록의 개수를 더하고 블록을 제거하는 데 걸리는 시간을 더합니다.
4. 현재 위치의 높이가 목표보다 낮은 경우 인벤토리에서 부족한 블록의 개수를 빼고 블록을 쌓는데 걸리는 식나을 더합니다.
5. 인벤토리가 0미만이 되는 경우는 블록이 부족해서 부족한 경우이므로 넘어가고 인벤토리가 0이상이 되는 경우 시간과 높이를 비교하여 더 좋은 값일 경우 저장합니다.
6. 저장되어있는 시간과 높이를 출력합니다.

소스코드

N, M, B = map(int, input().split())
field = []
minTime = 999999999
maxHigh = 0
for i in range(N):
    temp = list(map(int, input().split()))
    for j in range(M):
        field.append(temp[j])
for i in range(min(field), max(field)+1):
    inventory = B
    time = 0
    for j in range(len(field)):
        if field[j] > i:
            inventory += field[j]-i
            time += (field[j]-i)*2
        elif field[j] < i:
            inventory -= i-field[j]
            time += i-field[j]
    if inventory >= 0:
        if time <= minTime:
            minTime = time
            if maxHigh < i:
                maxHigh = i
print(minTime, maxHigh)

후기
백준에서 파이썬으로 제출하니 시간초과로 나와서 pypy3로 제출하고나서야 정답처리가 되었습니다. 다른 사람들의 코드를 보니 저보다 훨씬 더 효율적으로 짜신분이 많던데 푸는것에서 끝나는 것이 아니라 그런 분들의 풀이를 보고 좀 더 배워야 할 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글