베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Coding Test/BOJ

[BOJ/JAVA] 10709번: 기상캐스터

2022. 11. 21. 11:45

10709번: 기상캐스터

 

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
    'Coding Test/BOJ' 카테고리의 다른 글
    • [BOJ/JAVA] 3190번: 뱀
    • [BOJ/JAVA] 23351번: 물주기
    • [BOJ/JAAVA] 1967번: 트리의 지름
    • [BOJ/JAVA] 15681번: 트리와 쿼리
    베오
    베오

    티스토리툴바