[BOJ: 10709] - Python / 파이썬 - 기상캐스터

o_jooon_·2024년 3월 13일
0

BOJ

목록 보기
43/49
post-thumbnail

서론

구현 문제입니다.
입력 범위가 작아 무난하게 푸실 수 있습니다.

난이도

실버 5


문제

조건

시간 제한메모리 제한
1 초256 MB

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을 출력한다.


예시

예제 입력 1

3 4
c..c
..c.
....

예제 출력 1

0 1 2 0
-1 -1 0 1
-1 -1 -1 -1

예제 입력 2

6 8
.c......
........
.ccc..c.
....c...
..c.cc..
....c...

예제 출력 2

-1 0 1 2 3 4 5 6
-1 -1 -1 -1 -1 -1 -1 -1
-1 0 0 0 1 2 0 1
-1 -1 -1 -1 0 1 2 3
-1 -1 0 1 0 0 1 2
-1 -1 -1 -1 0 1 2 3

풀이

입력 받은 2차원 배열을 하나씩 탐색하면서 c의 존재 여부와 존재하는 칸으로부터 거리를 세주면 쉽게 해결이 가능합니다.

출력 조건은 다음과 같습니다.

  1. 현재 열에 c가 존재하는지에 대한 변수와 있는 경우 거리를 세어줄 변수를 선언합니다.
  2. 현재 문자가 c면 0을 출력하고 거리를 0으로 초기화, c가 존재함을 체크합니다.
  3. c가 존재하면서 현재 문자가 .인 경우 거리를 증가시키고 거리를 출력합니다.
  4. c가 존재하지 않으면서 현재 문자가 .인 경우 -1을 출력합니다.
  5. c가 나올 때마다 거리는 0으로 초기화시켜줍니다.

코드

import sys
input = sys.stdin.readline

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

for i in board:
    flag = False					# c가 현재 열에 존재하는지에 대한 변수
    cnt = 0							# c로부터의 거리를 나타내는 변수

    for j in i:
        if j == 'c':				# 현재 문자가 c인 경우
            print(0, end=' ')		# 0출력
            flag = True				# 현재 열에 c가 존재
            cnt = 0					# c로부터의 거리 0
        else:						# 현재 문자가 .인 경우
            if not flag:			# 현재 열에 c가 존재하지 않은 경우
                print(-1, end=' ')	# -1 출력
            else:					# 현재 열에 c가 존재하는 경우
                cnt += 1			# c로부터의 거리 1 증가
                print(cnt, end=' ')	# c로부터의 거리 출력
    print()							# 열 마다 줄바꿈

실행 결과

profile
안녕하세요.

0개의 댓글