10709번: 기상캐스터
출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시
www.acmicpc.net
키워드
- 모든 구름은 1분이 지날 때마다 1킬로미터씩 동쪽으로 이동한다.
- 외부에서 구름이 이동해 오는 경우는 없다.
- 지금부터 몇 분뒤 처음으로 하늘에 구름이 오는지
구현
- 결과 2차원 배열을 -1로 초기화한다.
- 시간이 지남에 따라(반복문) 해당하는 동작을 모듈화하여 구현한다.
- 각 행마다 열의 구름의 [i][0] 부터 [i][W-1] 까지 구름의 위치를 찾는다.
- 구름의 위치는 가장 오른쪽 구름의 위치를 저장한다.
- 동시에 열마다 이미 저장되어 있는 구름의 위치를 이용하여 다음을 계산한다.
- (현재 열 - 구름이 저장되어 있는 열)
- 위 계산 값을 결과값으로 저장한다.
항상 느끼는 것이지만 시뮬레이션은 코드를 어떻게 잘 모듈화 했느냐에 따라 시간이 단축되는 것 같다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class java_10709 {
// 높이, 너비
static int H, W;
static char board[][];
static int result[][];
static void solution() {
//
for (int i = 0; i < board.length; i++) {
int cloudX = -1;
for (int j = 0; j < board[i].length; j++) {
// 구름 위치 갱신
if (board[i][j] == 'c') {
cloudX = j;
}
// 구름이 있다면 몇 분 후에 구름이 오는지 저장
if (cloudX != -1) {
result[i][j] = j - cloudX;
}
}
}
}
static void printResult() {
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
System.out.print(result[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) throws IOException {
// 구름은 1분이 지날 때 마다 동쪽으로 이동
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
H = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
board = new char[H][W];
result = new int[H][W];
// c는 구름 .는 맑음
for (int i = 0; i < board.length; i++) {
board[i] = br.readLine().toCharArray();
Arrays.fill(result[i], -1);
}
// 각 행의 0열부터 돌면서 구름이 있는지 체크, 마지막 구름 위치를 갱신, 현재 열-마지막 구름의 열 값 출력
// 만약 구름이 없다면 -1 출력
solution();
printResult();
br.close();
}
}
'Coding Test > BOJ' 카테고리의 다른 글
[BOJ/JAVA] 3190번: 뱀 (0) | 2022.11.21 |
---|---|
[BOJ/JAVA] 23351번: 물주기 (0) | 2022.11.21 |
[BOJ/JAAVA] 1967번: 트리의 지름 (0) | 2022.11.14 |
[BOJ/JAVA] 15681번: 트리와 쿼리 (1) | 2022.11.14 |
[BOJ/JAVA] 9934번: 완전 이진 트리 (0) | 2022.11.14 |