본문 바로가기
Problem Solving/BOJ

[BOJ][Python]18111번 풀이

by NoiB 2022. 2. 22.
반응형

드디어 클래스 2의 마지막입니다. 마지막이라 그런지 구현문제라서 고민도 하면서 즐겁게 풀었네요. 추가시간없음은 부담이었지만요.

 

https://www.acmicpc.net/problem/18111

 

18111번: 마인크래프트

팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게

www.acmicpc.net

import sys
ssr = sys.stdin.readline

n,m,b = map(int, ssr().split())
board = [list(map(int, ssr().split())) for _ in range(n)]
h = [i for i in range(257)]
result = []
for i in h:
    two = 0
    one = 0
    for j in range(n):
        for k in range(m):
            if board[j][k] >= i:
                two += board[j][k] - i
            else:
                one += board[j][k] - i
    if b+two+one >= 0:
        result.append([two*2 - one, i])
result.sort(key=lambda x:(x[0],-x[1]))
print(*result[0])

이번 문제는 브루트 포스로 풀어버리는게 사실 속이 제일 편합니다. 가끔은 무식하게 풀고 최적화를 하는게 낫습니다(제가 가장 못하는 일이기도 하지만요). 코드에 대해서 간단하게 설명을 드리자면 가능한 높이의 리스트를 만들어서 해당 높이에 대해서 3중 반복문을 돌면서 모든 연산을 수행하는 겁니다. 257*500*500+a 의 연산이 일어나겠지만 그래도 절대 안돌아갈 정도는 아니니까요. 그렇게 하고 sort를 이용해서 맨 첫번째 값을 출력해주면 되는 일입니다.

 

참 말로 하고 보면 간단한데 항상 직접 풀 때는 이것도 해보고 저것도 해보고 하면서 고민을 많이 하게되죠. 가급적이면 구현 문제는 최대한 혼자서 풀어보시길 바랍니다. 뭐랄까 자신감이 상승하는데에 도움이 많이 됩니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]1074번 풀이  (0) 2022.02.24
[BOJ][Python]백준 1012 풀이  (0) 2022.02.23
[BOJ][Python]백준 15829 풀이  (0) 2022.02.20
[BOJ][Python]백준 10773 풀이  (0) 2022.02.20