• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • [Baekjoon(백준)][10709번] 기상캐스터(C++)
    2024년 01월 31일
    • 유니얼
    • 작성자
    • 2024.01.31.:34
    728x90

    안녕하세요! 오늘은 코딩테스트 문제 중 하나인 "기상캐스터" 문제를 해결하는 방법에 대해 설명하려고 합니다. 이 문제에서는 JOI시의 각 구역에 대해, 지금부터 몇 분 후 처음으로 하늘에 구름이 나타나는지 예측하는 것입니다. 문제를 해결하는 과정과 코드를 자세히 알아보겠습니다.

    문제링크:

    https://www.acmicpc.net/problem/10709

     

    10709번: 기상캐스터

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

    www.acmicpc.net

    Question_1
    Question_2

    문제 개요

    "기상캐스터" 문제에서는 JOI시의 각 구역에 대해, 지금부터 몇 분 후 처음으로 하늘에 구름이 나타나는지 예측하는 것입니다. JOI시는 H x W 크기의 격자로 나뉘어 있으며, 각 구역에 구름이 있거나 없을 수 있습니다. 모든 구름은 매 분마다 동쪽으로 1km 이동합니다.

    해결 방법

    이 문제의 핵심은 구름이 있는 구역을 찾고, 각 구역에 대해 구름이 몇 분 후에 도달하는지 계산하는 것입니다. 각 구역에서 구름이 있으면 0을, 없으면 -1을 배열에 저장합니다. 그런 다음, 각 구역을 순회하면서 구름이 있는 구역부터 시작하여 동쪽으로 구름이 이동하는 시간을 계산합니다.

    코드 구현

    #include <iostream>
    #include <vector>
    using namespace std;
    int h, w;
    int ret[102][102];
    bool visited[102][102];
    
    // 구름이 있는 구역에서 시작하여 동쪽으로 이동
    void go(int y, int x) {
        if (x >= w) return;
        visited[y][x] = true;
        for (int j = x; j < w; j++) {
            if (ret[y][j] == 0) continue;
            else {
                if (visited[y][j]) continue;
                ret[y][j] = ret[y][j - 1] + 1;
                visited[y][j] = true;
            }
        }
    }
    
    int main() {
        ios_base::sync_with_stdio(false);
        cin.tie(NULL);
        cout.tie(NULL);
    
        cin >> h >> w;
        for (int i = 0; i < h; i++) {
            string str;
            cin >> str;
            for (int j = 0; j < w; j++) {
                if (str[j] == 'c') ret[i][j] = 0;
                else ret[i][j] = -1;
            }
        }
    
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                if (ret[i][j] == 0) {
                    go(i, j);
                    break;
                }
            }
        }
    
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                cout << ret[i][j] << " ";
            }
            cout << "\n";
        }
    }

    코드 설명

    본 코드는 각 구역의 구름 상태를 나타내는 2차원 배열 ret을 사용합니다. go 함수는 주어진 위치에서 시작하여 동쪽으로 구름이 언제 도착하는지 계산합니다. visited 배열은 해당 구역이 이미 처리되었는지 확인하는 데 사용됩니다.

    결론

    "기상캐스터" 문제는 2차원 배열과 간단한 시뮬레이션을 통해 해결할 수 있습니다. 각 구역을 순회하며 구름이 언제 도달하는지 계산하는 방식으로 문제를 해결할 수 있습니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바