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
- algorithm
- 백트래킹
- MySQL
- 멘딕스
- 해시맵
- Mendix
- Bruteforce
- microflow
- dfs
- 자바
- SQL
- 완전탐색
- Recursion
- 트리
- git
- 매개변수 탐색
- Sort
- 그래프
- 이분탐색
- 자료구조
- 집합
- 스택
- 프로그래머스
- 알고리즘
- 재귀
- 가중치없는그래프
- 정렬
- domain model
- lcap
- 반효경교수님
Archives
- Today
- Total
mondegreen
[240303] 알고리즘 리부트 23일차 - 백준 10836 자바 본문
반응형
- 백준 10836 여왕벌
누적합을 공부한 덕분에 풀 수 있었던 문제이다. 시간 제한이 있어서 최적화를 요하는 문제였는데 모든 누적합을 매번 계산하는 것이 아니라 태상이의 어쩌고 저쩌고 처럼 시작점과 끝점에서 계산해주고 복원하는 인덱스 접근으로 시간 복잡도를 낮추어서 처리하는 방식을 적용했다.
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static int m, n;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
m = Integer.parseInt(st.nextToken());
n = Integer.parseInt(st.nextToken());
int[] totalGrowth = new int[2 * m + 1];
int[][] larva = new int[m][m];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int first = Integer.parseInt(st.nextToken());
int second = Integer.parseInt(st.nextToken());
int third = Integer.parseInt(st.nextToken());
totalGrowth[first + 1] += 1;
totalGrowth[first + 1 + second] -= 1; // -1 복원처리
totalGrowth[first + 1 + second] += 2;// +2 반영
totalGrowth[first + 1 + second + third] -= 2;
}
//System.out.println(Arrays.toString(totalGrowth));
for (int i = 1; i < totalGrowth.length; i++) {
totalGrowth[i] = totalGrowth[i - 1] + totalGrowth[i];
}
updateIndependentGrowth(totalGrowth, larva);
updateDependentGrowth(larva);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
bw.write(larva[i][j] + 1 + " ");
}
bw.write("\n");
}
bw.flush();
}
private static void updateIndependentGrowth(int[] totalGrowth, int[][] larva) {
int idx = 1;
for (int i = m - 1; i >= 0; i--) {
larva[i][0] = totalGrowth[idx++];
}
for (int i = 1; i <= m - 1; i++) {
larva[0][i] = totalGrowth[idx++];
}
}
private static void updateDependentGrowth(int[][] larva) {
for (int i = 1; i < m; i++) {
for (int j = 1; j < m; j++) {
int max = checkAround(i, j, larva);
larva[i][j] = max;
}
}
}
private static int checkAround(int i, int j, int[][] onlyForTheDay) {
return Math.max(onlyForTheDay[i][j - 1], Math.max(onlyForTheDay[i - 1][j], onlyForTheDay[i - 1][j - 1]));
}
}
반응형
'알고리즘 풀이 및 리뷰 > 백준' 카테고리의 다른 글
[240319] 알고리즘 리부트 33일차 - 백준 2792 자바 (1) | 2024.03.19 |
---|---|
[240310] 알고리즘 리부트 28일차 - 백준 2143 자바 (0) | 2024.03.11 |
[240302] 알고리즘 리부트 22일차 - 백준 24479 자바 (0) | 2024.03.03 |
[240227] 알고리즘 리부트 18일차 - 백준 2447 자바 (0) | 2024.02.27 |
(BJ_2567) 색종이2 (0) | 2023.02.28 |