[백준-18111] 마인크래프트

이말감·2022년 3월 24일
0

백준

목록 보기
22/49

문제

링크

코드

n, m, b = map(int, input().split())

ground = []
# 땅의 높이를 받는데 굳이 2차원 배열로 할 필요가 없으므로 1차원 배열에 넣는다.
for _ in range(n) :
    ground += list(map(int, input().split()))
# 땅이 높은 부분부터 해야 인벤토리에 저장해서 낮은 땅에 블록을 올릴 수 있으므로 내림차순 정렬
ground = sorted(ground, reverse=True)

answer = []
# 현재 땅의 최소값부터 최대값까지
for i in range(min(ground), max(ground)+1) :
    time = 0
    inven = b
    chk = True
    for g in ground :
        # 땅의 높이가 같으면 넘김
        if g == i :
            continue
        # 기준보다 땅의 높이가 낮을 때
        elif i > g :
            # 땅의 높이 차이
            minus = i - g
            # 땅의 높이가 256 초과거나 인벤토리 내에 블록 개수가 음수면 안된다.
            if g + minus > 256 or inven - minus < 0 :
                chk = False
                break
            # 인벤토리에서 꺼내기
            inven -= minus
            # 작업 시간이 1초 걸리므로 그냥 minus
            time += minus
        # 기준보다 땅의 높이가 높을 때
        elif i < g :
            # 땅의 높이 차이
            minus = g - i
            # 땅의 높이가 0보다 작으면 안된다.
            if g - minus < 0 :
                chk = False
                break
            # 인벤토리에 넣기
            inven += minus
            # 작업 시간이 2초 걸리므로 *2
            time += 2*minus
    # 문제 없이 진행되면 배열에 넣기
    if chk == True :
        answer.append([time, i])
 
 
# 시간을 기준으로 오름차순 정렬한 후, 동일 시간 내 땅 높이를 내림차순으로 정렬
answer = sorted(answer, key=lambda x: (x[0], -x[1]))
print(answer[0][0], answer[0][1])

계속 시간초과가 나길래 pypy3으로 제출했더니 맞았다.

profile
전 척척학사지만 말하는 감자에요

0개의 댓글