[BOJ/Python] 10709번: 기상캐스터 | 시뮬레이션

2025. 4. 3. 15:50·Program Solving/Python

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

 

문제

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

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

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

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

 

입력

입력은 1 + H 행으로 주어진다.

첫 번째 행에는 정수 H, W (1 ≦ H ≦ 100, 1 ≦ W ≦ 100) 가 공백을 사이에 주고 주어진다. 이것은 JOI시가 H × W 개의 작은 구역으로 나뉘어 있다는 것을 의미한다.

이어진 H 개의 행의 i번째 행 (1 ≦ i ≦ H) 에는 W문자의 문자열이 주어진다. W 개의 문자 중 j번째 문자 (1 ≦ j ≦ W) 는, 구역 (i, j) 에 지금 구름이 떠 있는지 아닌지를 나타낸다. 구름이 있는 경우에는 영어 소문자 'c' 가, 구름이 없는 경우에는 문자 '.' 가 주어진다.

 

출력

출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시한다. 단, 처음부터 구역 (i, j) 에 구름이 떠 있었던 경우에는 0을, 몇 분이 지나도 구름이 뜨지 않을 경우에는 -1을 출력한다.

 


 

코드

h, w = map(int, input().split())
sky = [list(input()) for _ in range(h)]

result = [[-1 for _ in range(w)] for _ in range(h)]

for i in range(h):
    for j in range(w):
        if sky[i][j] == 'c':
            for k in range(j, w):
                if result[i][k] != -1:
                    result[i][k] = min(result[i][k], k-j)
                else:
                    result[i][k] = k-j
            result[i][j] = 0

for row in result:
    for i in row:
        print(i, end=" ")
    print()

 

풀이

1. 하늘의 크기 h, w를 입력받고, 현재 하늘의 상태를 sky 2차원 리스트에 입력받는다.

2. 몇 분 후에 구름이 뜨는지 저장하기 위해 result 리스트를 모든 원소를 -1로, h x w 크기로 초기화한다.

3. 모든 요소를 구름인지 확인하고, 구름이면 같은 행 오른쪽 열들을 순회하면서 구름이 뜨는 시간을 저장한다. 이때, 구름이 동쪽으로 이동하기 때문에 같은 행에 구름이 2개면 중복으로 구름이 뜬다. 이를 방지하기 위해 최솟값을 저장하도록 했다.

4. 구름이 있었던 곳은 0으로 한다.

5. 결과값을 출력한다. 

 

'Program Solving > Python' 카테고리의 다른 글

[BOJ/Python] 2015번: 수들의 합 4 | 누적합 + 해시맵  (0) 2025.04.12
[BOJ/Python] 14719번: 빗물 | 시뮬레이션  (1) 2025.04.04
[BOJ/Python] 2578번: 빙고 | 시뮬레이션  (0) 2025.04.03
[BOJ/Python] 2133번: 타일 채우기 | DP bottom-up  (0) 2025.03.30
[BOJ/Python] 11054번: 가장 긴 바이토닉 부분 수열 | LBS  (0) 2025.03.28
'Program Solving/Python' 카테고리의 다른 글
  • [BOJ/Python] 2015번: 수들의 합 4 | 누적합 + 해시맵
  • [BOJ/Python] 14719번: 빗물 | 시뮬레이션
  • [BOJ/Python] 2578번: 빙고 | 시뮬레이션
  • [BOJ/Python] 2133번: 타일 채우기 | DP bottom-up
찌요.
찌요.
  • 찌요.
    jiho's Tech Blog
    찌요.
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • Computer Science (14)
        • Computer Network (12)
        • Operating System (2)
      • Backend (2)
        • Node.js (2)
      • Program Solving (38)
        • Python (30)
        • C++ (8)
      • 회고록 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    boj
    Internet
    CDN
    Checksum
    C++
    해시맵
    누적합
    P2P
    백준
    Protocol
    computer network
    OS
    CCW
    시뮬레이션
    vector
    UDP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
찌요.
[BOJ/Python] 10709번: 기상캐스터 | 시뮬레이션
상단으로

티스토리툴바