heyjinn.dev
헤이지니
heyjinn.dev
  • 분류 전체보기 (66)
    • 알고리즘 💻 (21)
      • BOJ (12)
      • 요약정리 (6)
      • 과제 (3)
    • BackEnd 🌱 (13)
      • spring (13)
    • 📚study✨ (12)
      • Docker & Kubernetes (8)
      • 기타 (4)
    • ComputerScience 🐥 (8)
      • 운영체제 (0)
      • 컴퓨터네트워크 (8)
      • 데이터베이스 (0)
    • 에러 해결 👍 (6)
    • 후기 🔥 (4)
      • 세미나 (2)
      • 인턴 (0)
      • 프로젝트 (0)
    • 기타 (0)
    • 일상 (1)

인기 글

태그

  • 순열
  • dfs
  • 백트래킹
  • AWS
  • 자바
  • 두 원 사이의 정수 쌍
  • 프로그래머스
  • Python
  • 조합
  • EC2

최근 글

05-19 21:48
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
heyjinn.dev
[백준, Python] 18111 마인크래프트
알고리즘 💻/BOJ

[백준, Python] 18111 마인크래프트

2023. 10. 14. 17:46

가장 먼저, 땅의 높의는 256을 초과할 수 없으므로 높이의 최대값은 256 입니다. 

또한, 가로 세로는 500 이하이므로 높이, 가로, 세로 3중 포문을 돌려도 256 * 500 * 500 = 64,000,000

즉, 1초 안에 가능합니다. 따라서 브루트 포스로 풀 수 있습니다. 

 

핵심 아이디어는 다음과 같습니다. 

- for문을 통해 256층까지 탐색하면서 각 층의 블록들의 초과분과 부족분을 찾습니다. 

- (초과분 + 인벤토리의 블럭 수) >= 부족분 이면, 그 층 개수만큼의 블럭으로 평탄하게 할 수 있는 것입니다. 

- 따라서, 부족분과 초과분을 이용하여 시간을 계산하고 min값을 for문을 돌면서 체크합니다. 

- 층 수와 min값을 출력합니다.  

import sys

n, m, b = list(map(int, input().split()))
graph = [list(map(int, input().split())) for _ in range(n)]
idx = 0
answer = sys.maxsize

for floor in range(257):
    max_block, min_block = 0, 0  # 초과분, 부족분

    for i in range(n):
        for j in range(m):
            if graph[i][j] >= floor:  # 초과분 계산
                max_block += graph[i][j] - floor
            else:  # 부족분 계산
                min_block += floor - graph[i][j]

    if (max_block + b) >= min_block:  # floor층 개수로 평탄하게 할 수 있는지 체크(초과분 + 인벤토리의 블럭 수가 부족분보다 많으면 평탄하게 가능)
        if max_block * 2 + min_block <= answer:
            answer = max_block * 2 + min_block
            idx = floor  # 층수
print(answer, idx)

 

저작자표시 (새창열림)
    '알고리즘 💻/BOJ' 카테고리의 다른 글
    • [프로그래머스, Python] 게임 맵 최단거리
    • [프로그래머스, Python] 수식 최대화
    • [백준, c++] 3048 개미🐜
    • [백준, c++] 9663 N-Queen
    heyjinn.dev
    heyjinn.dev
    안녕하세요 ~ https://github.com/toki0411 부족하지만 열심히 공부중입니다 :D

    티스토리툴바