Yeon DevLog

Algorithm

[백준/BOJ][JAVA] 10709 - 기상캐스터

devYeON_ 2021. 12. 21. 21:16

[문제]

 

10709번: 기상캐스터

출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시

www.acmicpc.net

📒 문제

JOI시는 남북방향이 H 킬로미터, 동서방향이 W 킬로미터인 직사각형 모양이다. JOI시는 가로와 세로의 길이가 1킬로미터인 H × W 개의 작은 구역들로 나뉘어 있다. 북쪽으로부터 i 번째, 서쪽으로부터 j 번째에 있는 구역을 (i, j) 로 표시한다.

각 구역의 하늘에는 구름이 있을 수도, 없을 수도 있다. 모든 구름은 1분이 지날 때마다 1킬로미터씩 동쪽으로 이동한다. 오늘은 날씨가 정말 좋기 때문에 JOI시의 외부에서 구름이 이동해 오는 경우는 없다.

지금 각 구역의 하늘에 구름이 있는지 없는지를 알고 있다. 기상청에서 일하고 있는 여러분은 각 구역에 대해서 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지를 예측하는 일을 맡았다.

각 구역에 대해서 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지를 구하여라.

 

📒 문제해설

단순한 시뮬레이션으로 해결하였다. 값이 'c'인구간은 같은 크기의 int배열에 0으로 넣고 '.'인구간은 -1을 넣어 초기화하고 3중 for문을 돌려 크기를 증가시켜나가며 해결했다.

 

📒 소스코드

package BOJ.Simulation;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class boj10709_기상캐스터 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int H = Integer.parseInt(st.nextToken());
        int W = Integer.parseInt(st.nextToken());

        char[][] map = new char[H][W];
        int[][] result = new int[H][W];
        String[] input = new String[H];
        for (int i = 0; i < H; i++) {
            input[i] = br.readLine();
            for (int j = 0; j < W; j++) {
                map[i][j] = input[i].charAt(j);
                if (map[i][j] == '.') {
                    result[i][j] = -1;
                }
                if (map[i][j] == 'c') {
                    result[i][j] = 0;

                }
            }
        }
        int cloud = 0;

        for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                if (result[i][j] == 0) {
                    for (int k = j + 1; k < W; k++) {
                        if (result[i][k] == 0) {
                            cloud = 0;
                            break;
                        } else {
                            cloud += 1;
                            result[i][k] = cloud;
                        }

                    }
                }
            }
            cloud = 0;
        }

        for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                System.out.print(result[i][j] + " ");
            }
            System.out.println();
        }
    }

}

📒 리뷰

내제출

 


 

어려운 문제는 아니었기 때문에 바로 해결했던 것 같다. 소요시간은 25분 정도!

오늘 풀어야 했던 문제가 너무 어려워서 단순 해결 문제를 풀고 다시 풀어보려고 풀었던 문제였다🌛🌛