[Goorm][Py] 장마

mj·2024년 6월 13일
0

코딩테스트문제

목록 보기
26/50

문제 바로가기


문제


  • 1번집부터 N번집까지 총 N개의 집이 있다.
  • 장마가 시작되면 M일동안 비가 온다.
  • 장마가 시작된지 i일째 되는 날에는 s번 집부터 e번 집위치까지 비가 오며 물의 높이가 +1 만큼 증가한다.
  • 배수시스템은 장마가 시작된지 3의 배수가 되는 날마다 2일이내에 비가 내렸던 위치에서만 작동된다. 예를들어 장마가 시작되고 9일째에 작동하는 배수 시스템은 7,8,9일 째에 비가 내린 위치에서만 작동한다. 배수 시스템이 작동하면 그 집에 쌓인 물의 높이가 1만큼 감소한다.

➡️출력 : 장마가 끝난 뒤, 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번 집까지의 땅 높이를 구하는 문제이다.

  1. 장마기간만큼 for문을 돌려준다.

  2. 장마 day일째 - 비가 온 집의 시작(s)과 끝(e)을 입력받고 for문을 이용해 그 집들의 물 높이를 +1 증가시키고 비가 왔던 지역임을 기록한다.
    (비가 왔던 지역임을 기록하는 변수 rained_area : 배수시스템은 3일동안 비가 내려도 똑같이 1만큼만 감소시킨다. 따라서 중복을 허용하지 않기 위해 집합을 사용하였다.)

  3. 만약 오늘이 장마가 시작된지 3의 배수가 되는 날이라면, 배수시스템을 작동하여 3일동안 비가 내렸던 곳의 물높이를 -1 감소시키고 비가 내렸던 지역을 빈 집합으로 초기화시킨다.

참고) 마을의 땅 높이를 저장하기 위해 리스트(heights)를 사용하였다. 리스트는 [0]부터 시작하고 문제 속의 집은 1번부터 시작하므로 헷갈리지 않기 위해 1번집의 물 높이는 heights[1]에 저장해두었다. (리스트의 [0]는 빈 공간으로 두고 [1]부터 땅의 높이를 저장하였다.)

profile
일단 할 수 있는걸 하자.

0개의 댓글