시간&메모리 제한
문제
입력&출력
문제 풀이
package com.Back;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Back_18111 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int[][] map = new int[N][M];
int min = Integer.MAX_VALUE;
int max = 0;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
min = Math.min(min, map[i][j]);
max = Math.max(max, map[i][j]);
}
}
int ansS = Integer.MAX_VALUE;
int ansH = -1;
for (int f = min; f <= max; f++) {
int time = 0;
int block = B;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
int dif = map[i][j] - f;
if (dif > 0) {
time += Math.abs(dif) * 2;
block += Math.abs(dif);
} else if (dif < 0) {
time += Math.abs(dif);
block -= Math.abs(dif);
}
}
}
if (block < 0)
continue;
if (ansS >= time) {
ansS = time;
ansH = f;
}
}
System.out.println(ansS + " " + ansH);
}
}
※ 내 생각
이 문제의 경우는 층의 높이 최솟값부터 최댓값을 구한 후에 전부 탐색을 해주는 구현문제입니다.
값을 받아 오는 동시에 최솟값과 최댓값을 구했습니다.
또한 그 사이의 내가 만들고자 하는 층을 for문을 통해서 만들었으며, 그 높이 만큼 되기 위해서 이중 for문을 돌려서 모두 확인했습니다.
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
백준_1325 효율적인 해킹(자바) / DFS (0) | 2021.08.28 |
---|---|
백준_11724 연결 요소의 개수(자바) / DFS (0) | 2021.08.27 |
백준_1475 방 번호(자바) / 구현 (0) | 2021.08.24 |
백준_11286 절댓값 힙(자바) / 자료구조 (0) | 2021.08.23 |
백준_2812 크게 만들기 (자바) / 그리디 알고리즘 (0) | 2021.08.22 |