문제:
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을 출력한다.
풀이방법:
주어진 조건대로 구현해야 하는 문제다. 이 문제에서는 총 3가지 행동을 수행한다.
1. 지금 하늘에 구름(c)가 있는가?
2. 구름이 몇 분뒤에 지금 하늘에 도착하는가?
3. 구름의 이동
따라서 while 계속해서 반복하고, 1에 의해서 break 조건을 만든다. 그 동안에 2와 3을 반복하며 answer 2차원 배열을 채우도록 한다.
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
 | 
 from collections import deque 
def check_sky(sky): 
    for i in range(H): 
        for j in range(W): 
            if sky[i][j]=='c': 
                return 1 
    return 0 
def update_sky(sky, count): 
    for i in range(H): 
        for j in range(W): 
            if sky[i][j]=='c': 
                if answer[i][j]==-1: 
                    answer[i][j] = count 
H, W = map(int,input().split()) 
answer = [ [-1 for _ in range(W)] for _ in range(H)] 
sky = [] 
for _ in range(H): 
    sky.append(deque(input())) 
count = 0 
while True: 
    if not check_sky(sky): 
        break 
    update_sky(sky, count) 
    for i in range(H): 
        sky[i].pop() 
        sky[i].appendleft('.') 
    count+=1 
for ans in answer: 
    print(*ans) 
 | 
cs | 
문제링크:
https://www.acmicpc.net/problem/10709
10709번: 기상캐스터
출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시
www.acmicpc.net
'Algorithm > Python' 카테고리의 다른 글
| [BOJ]2852. NBA 농구 (0) | 2022.07.28 | 
|---|---|
| [BOJ]3474. 교수가 된 현우 (0) | 2022.07.26 | 
| [BOJ]2870. 수학숙제 (0) | 2022.07.19 | 
| [BOJ]11758. CCW (0) | 2022.07.14 | 
| [BOJ]4659. 비밀번호 발음하기 (0) | 2022.07.12 |