Algorithm
백준_여왕벌_10836
Young_J
2020. 10. 28. 23:06
//알고리즘
1. 단순 시뮬레이션 문제
-> 구현은 크게 어렵지는 않았지만 주어진 값의 범위를 생각못하고 재귀로 풀어버리려고했음..(N값 100만)
-> 재귀를 for문으로 고쳤지만 시간초과가 남.
-> 알고리즘은 똑같지만 입력할 때, Scanner를 사용했는데 BufferedReader로 바꿔서 시간초과를 해결 함.
-> M값이 700이하고 N값이 100만 이하기 때문에 지금 구현 한 알고리즘도 문제가 있어보임.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int map[][], M, N, num[][];
static int[] dr = { 0, -1, -1 };
static int[] dc = { -1, -1, 0 };
public static void main(String[] args) throws IOException {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
map = new int[M][M];
num = new int[N][3];
for (int i = 0; i < M; i++) {
Arrays.fill(map[i], 1);
}
int[] arr = new int[2 * M - 1];
for (int k = 0; k < N; k++) {
st = new StringTokenizer(br.readLine());
int zero = Integer.parseInt(st.nextToken());
int one = Integer.parseInt(st.nextToken());
int two = Integer.parseInt(st.nextToken());
for (int i = 1; i <= one; i++) {
arr[zero+i-1] += 1;
}
for (int i = 1; i <= two; i++) {
arr[zero+one+i-1] += 2;
}
}
calMap(arr);
print(map);
}
private static void calMap(int[] arr) {
int index = 0;
for (int r = M - 1; r >= 0; r--) {
map[r][0] += arr[index++];
}
for (int c = 1; c < M; c++) {
map[0][c] += arr[index++];
}
for (int i = 1; i < M; i++) {
for (int j = 1; j < M; j++) {
int nr = i + -1;
int nc = j + 0;
map[i][j] = map[nr][nc];
}
}
}
private static void print(int[][] map) {
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
System.out.println();
}
}