백준 10836번 - 여왕벌

박진형·2022년 1월 11일
0

algorithm

목록 보기
104/111

문제 풀이

문제에 나와있는 것처럼 왼쪽아래에서부터 오른쪽위 까지 성장 정보를 담을 배열을 사용한다.(2*m - 1 개)
문제에서 조건을 잘 살펴보면 성장도는 감소하지 않는다고 했으므로 어떤 한 위치의 성장도는 무조건 그 위치 바로 위쪽의 성장도를 따른다.

0열을 제외한 모든 열은 그 열의 0행의 누적 성장치 만큼 성장한다.

그러므로 가장자리의 누적 성장치를 기록하고, 0열은 따로 출력, 나머지 열은 해당 열의 0행 누적 성장치를 출력하면 된다.

문제 링크

boj/10836

소스코드

PS/10836.java

import java.io.*;

import java.sql.Array;
import java.util.*;


public class Main {

    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static int[][] map;
    static int[] grow_weight;
    static int[][] grow;

    public static void main(String[] args) throws IOException {

        StringTokenizer st = new StringTokenizer(br.readLine());
        int m = Integer.parseInt(st.nextToken());
        int n = Integer.parseInt(st.nextToken());

        grow = new int[n][3];
        grow_weight = new int[2*m-1];
        for (int i = 0; i < 2*m-1; i++) {
            grow_weight[i] = 1;
        }
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            int a= Integer.parseInt(st.nextToken());
            int b= Integer.parseInt(st.nextToken());
            int c = Integer.parseInt(st.nextToken());
            for (int l = a; l < a + b; l++) {
                    grow_weight[l]++;
            }
            for (int l = a+b; l < 2*m-1;l++)
                grow_weight[l]+=2;
        }
        for (int i = 0; i < m; i++) {
            System.out.print(grow_weight[m-i-1] + " ");
            for (int j = 1; j < m; j++) {
                System.out.print(grow_weight[m + j - 1] + " ");
            }
            System.out.println("");
        }
    }

}

0개의 댓글