➡️출력 : 장마가 끝난 뒤, 1번 집 부터 N번 집까지의 땅 높이를 출력
n, m = map(int, input().split())
heights = [0] + list(map(int, input().split()))
rained_area = set()
# 장마기간동안 물 높이 처리
for day in range(1, m+1):
#장마 day일째 비가 내린 위치 : s~e번까지
s,e = map(int, input().split())
#day일째 s~e번째 집 물높이+1
for i in range(s, e+1):
heights[i] += 1
rained_area.add(i)
#배수시스템 처리
if day%3==0:
#비가 내렸던 지역 물높이 -1
for area in rained_area:
heights[area] -= 1
#초기화
rained_area = set()
# 결과 출력
print(' '.join(map(str, heights[1:])))
장마가 모두 끝난 뒤, 1번 집부터 N번 집까지의 땅 높이를 구하는 문제이다.
장마기간만큼 for문을 돌려준다.
장마 day
일째 - 비가 온 집의 시작(s
)과 끝(e
)을 입력받고 for문을 이용해 그 집들의 물 높이를 +1 증가시키고 비가 왔던 지역임을 기록한다.
(비가 왔던 지역임을 기록하는 변수 rained_area
: 배수시스템은 3일동안 비가 내려도 똑같이 1만큼만 감소시킨다. 따라서 중복을 허용하지 않기 위해 집합을 사용하였다.)
만약 오늘이 장마가 시작된지 3의 배수가 되는 날이라면, 배수시스템을 작동하여 3일동안 비가 내렸던 곳의 물높이를 -1 감소시키고 비가 내렸던 지역을 빈 집합으로 초기화시킨다.
참고) 마을의 땅 높이를 저장하기 위해 리스트(heights
)를 사용하였다. 리스트는 [0]부터 시작하고 문제 속의 집은 1번부터 시작하므로 헷갈리지 않기 위해 1번집의 물 높이는 heights[1]에 저장해두었다. (리스트의 [0]는 빈 공간으로 두고 [1]부터 땅의 높이를 저장하였다.)