Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Application Argument
- 리소스 서버
- EnableAutoConfiguration
- HttpMessageConverters
- 백트래킹
- 스프링부트
- 브루트포스
- AuthenticationPrincipal
- JsonSerializer
- webjar
- 외부설정
- OAuth2
- 백기선
- @ConfigurationProperties
- 알고리즘
- 정적 리소스
- 리소스핸들러
- JPA
- Application Runner
- Spring Security
- WebApplication Type
- @Profile
- 다익스트라
- Application Event
- rest api
- 스프링 부트
- application.properties
- cors
- HATEOAS
- 백준
Archives
- Today
- Total
아카이브
[백준]18111. 마인크래프트 본문
https://www.acmicpc.net/problem/18111
public class p18111 {
static int N, M, B;
static int[][] arr;
static int MIN_HEIGHT = Integer.MAX_VALUE;
static int MAX_HEIGHT = Integer.MIN_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = stoi(st.nextToken());
M = stoi(st.nextToken());
B = stoi(st.nextToken());
arr = new int[N][M];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
arr[i][j] = stoi(st.nextToken());
MIN_HEIGHT = Math.min(MIN_HEIGHT, arr[i][j]);
MAX_HEIGHT = Math.max(MAX_HEIGHT, arr[i][j]);
}
}
MAX_HEIGHT = Math.min(MAX_HEIGHT, 256); // 높이 최대 256
List<Answer> list = new ArrayList<>(); // 같은 시간의 복수 정답건에 대한 list
for (int height = MIN_HEIGHT; height <= MAX_HEIGHT; height++) {
int time = 0;
int inventory = B;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (arr[i][j] != height) { // 높이가 달라서 깎든/채우든 해야할 경우에만
if (arr[i][j] > height) { // 깎아야 하는 경우
time += 2 * (arr[i][j] - height); // 깎는데 2초 걸린다
inventory += arr[i][j] - height; // 인벤토리에 깎은만큼 추가한다
} else { // 채워야 하는 경우
int needs = Math.abs(arr[i][j] - height); // 얼만큼 채워야하나
time += needs; // 채우는데 1초 걸린다
inventory -= needs; // 인벤토리에서 채워준만큼 빼준다
}
}
}
}
if (inventory >= 0) { // 인벤토리가 0보다 작으면 말도 안되는 경우이니까 정답이 아니다
list.add(new Answer(time, height));
}
}
// 같은 시간의 정답이 여러개라면, 높이가 최대인 것을 출력하기 위해 정렬한다
Collections.sort(list, (o1, o2) -> {
if (o1.time == o2.time) {
return o2.height - o1.height;
} else {
return o1.time - o2.time;
}
});
System.out.println(list.get(0).time + " " + list.get(0).height);
}
static int stoi(String str) {
return Integer.parseInt(str);
}
static class Answer {
int time, height;
public Answer(int time, int height) {
this.time = time;
this.height = height;
}
}
}
'자료구조&알고리즘' 카테고리의 다른 글
[백준]1874. 스택 수열 (0) | 2021.01.09 |
---|---|
[백준]1987.알파벳 (0) | 2020.09.14 |
[백준]13549.숨바꼭질3 (0) | 2020.09.14 |
[백준]1753.최단경로 (0) | 2020.09.14 |
[백준]1238.파티 (0) | 2020.09.14 |