바위 뚫는중

[BOJ] 백준 10709. 기상캐스터 본문

Algorithms/백준

[BOJ] 백준 10709. 기상캐스터

devran 2023. 8. 27. 17:32
반응형

문제

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

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

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

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

풀이

3 4
c..c
..c.
....

위와 같이 주어질 경우

0 1 2 0
-1 -1 0 1
-1 -1 -1 -1

이런 식으로 나타나게 된다.

쉽게 생각해보면

  • . 이면 -1을 두고
  • C가 나오면 나왔다고 카운트로 표시함
  • 다시 C가 나오기 전까지 ++

무조건 동쪽(오른쪽)으로만 바람이 불어서 생각보다 쉽게 풀린다. 그치만,,난 오래걸림

개인적으로 가장 어려웠던 것은 역시나! 입출력!

난 왜이렇게 입출력이 어려울까,, 로직이 더 쉽게 느껴진다 흑

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

public class Main {
    static int H;
    static int W;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        H = Integer.parseInt(st.nextToken());
        W = Integer.parseInt(st.nextToken());
        int cnt = 0; //C가 나올때 써준다
        //C 가 있는 거 찾기 
        for (int i = 0; i < H; i++) {
        	String line = br.readLine();
            for (int j = 0; j < W; j++) {
            	String x = String.valueOf(line.charAt(j)); // 한 문자씩 배열에 저장
            	// 전에 C가 없고 . 일 경우
            	if (x.equals(".") && cnt == 0) {
            		System.out.print( -1 +" ");
            	}
            	// C일 경우 무조건 0출력 카운트 세주기 
            	else if ( x.equals("c")) {
            		System.out.print(0 +" ");
            		cnt = 1;
            	}
            	// . 이고, 카운트도 0이 아닐 경우 
            	else if (x.equals(".") && cnt != 0) {
            		System.out.print(cnt +" ");
            		cnt ++; //C고 전 0 이 아닐 때 늘려준다
            	}
            }
            System.out.println();
            cnt = 0;  //0으로 초기화
        }

    }
}
반응형