문제
https://www.acmicpc.net/problem/10709
Algorithm
해당 위치에 구름이 몇 분 후에 도달하는지 출력하는 문제이다.
구름은 오른쪽으로만 이동하고, 구름이 있는 위치는 0으로, 구름이 도달하지 않으면 -1을 출력한다.
구름이 오른쪽으로만 이동하기 때문에, 해당 행에서 왼쪽으로 가장 가까운 구름과 자기 자신의 거리를 따져주면 된다. 즉, 반복문을 통해 행을 조사하면서 구름이 등장하면 등장한 위치를 계속 갱신해주어 거리를 계산해주면 된다. 이때, 해당 행에 구름이 없는 경우도 존재하므로 초기값을 -1로 설정하도록 한다.
이제, 이를 구현해보면 2중 반복문을 사용하는데, 해당 행의 loop를 처음했을때 least_cloud를 -1로 초기화 해준다. 그리고 또 다른 loop으로 해당 행의 열을 검사하면서 구름이 있으면 0으로 설정한다. 만약에 해당 행이 구름이 아니면 least_cloud에 1을 더하면서 구름과의 최소거리를 계산한후에 임시 배열에 넣어준다.
for i in range(h):
temp = []
least_cloud = -1
for j in range(w):
if area[i][j] == 'c':
least_cloud = 0
else:
if least_cloud != -1:
least_cloud+=1
temp.append(least_cloud)
이후에 문제가 원하는 대로 배열을 출력해준다.
Code
input = __import__('sys').stdin.readline
h,w = map(int,input().split())
area = []
ans = []
for _ in range(h):
area.append(list(input().strip()))
for i in range(h):
temp = []
least_cloud = -1
for j in range(w):
if area[i][j] == 'c':
least_cloud = 0
else:
if least_cloud != -1:
least_cloud+=1
temp.append(least_cloud)
ans.append(temp)
for i in range(h):
print(*ans[i])
'Koala - 15기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/python] 1966: 프린터 (0) | 2024.07.21 |
---|---|
[백준/C++] 15657번: N과 M (8) (0) | 2024.07.21 |
[백준/Rust]14719번 : 빗물 (0) | 2024.07.15 |
[백준/Python] 1463번 1로 만들기 (0) | 2024.07.14 |
[백준 25418] 정수 a를 k로 만들기 python (0) | 2024.07.14 |