Backend
home
☁️

[백준] 기상캐스터

생성일
2025/02/06 01:48
태그
BaekJoon
게시일
2025/02/06
최종 편집 일시
2025/02/06 01:55

문제

해결 방안 고민

JOI시?! 가로, 세로(width, height) 의 길이가 1km H x W 북쪽으로부터 i 번째, 서쪽으로부터 j 번째 있는 구역을(i, j) 로 표시 => 각 구역에는 구름이 있을 수도, 없을 수도 있음 모든 구름은 1분이 지나면 1킬로미터씩 동쪽으로 이동 => 날씨가 좋으면 외부에서 구름이 이동해오는 경우가 없음 여러분은 각 구역에 대해서 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지를 예측하는 일을 맡았음 각 구역에 대해 지금부터 몇 분 뒤 처음으로 하늘에 구름이 오는지를 구하기 == 입력 == 1 + H(세로) 행으로 주어짐 H개행의 i번째 행에는 W 문자의 문자열이 주어짐 이어진 H개의 행 i번째 행에 W문자의 문자열이 주어짐 구름이 있는 경우 영어 소문자 'c', 구름이 없는 경우 문자 '.'가 주어짐 == 출력 == W 개의 정수 출력, 지금부터 몇 분 후에 처음으로 구역(i, j) 에 구름이 뜨는지 표시 단 처음부터 구역 (i, j) 에 구름이 떠 있었던 경우에는 0을, 몇 분이 지나도 구름이 뜨지 않을 경우 -1을 출력
Markdown
복사
2차원 배열을 활용하지 않으면서 문제를 해결할 수 있는 방법에 대해 고민했다.
최대한 배열을 생성하지 않으면서 문제를 해결하는 방향으로 문제풀이를 진행하였다.

해결 방법

이중 for문과 조건문을 활용하면 간단하게 해결되는 문제였다.
출력할 때는 시간 단축을 위해 BufferedWriter를 활용하였다.
charAt() 을 사용하여 문자열의 각 요소들을 비교하는 로직으로 구성하였다.

코드

BufferedWriter 의 경우 버퍼를 잡아 놓았기 때문에 반드시 사용한 후에 flush() / close()를 해주어야 한다.
import java.io.*; import java.util.*; // 기상캐스터 - 실버 5 public class Baek10709 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); // H, W 입력 int H = Integer.parseInt(st.nextToken()); int W = Integer.parseInt(st.nextToken()); int count = 0; // c가 나올 때마다 초기화 시켜줌 for (int i = 0; i < H; i++) { String str = br.readLine(); // 문자마다 비교하기 for (int j = 0; j < W; j++) { if (str.charAt(j) == '.' && count == 0) { bw.write(-1 + " "); } else if (str.charAt(j) == 'c') { bw.write(0 + " "); count = 1; } else if (str.charAt(j) == '.' && count != 0) { bw.write(count + " "); count++; } } count = 0; bw.write("\n"); } bw.flush(); br.close(); bw.close(); } }
Java
복사