알고리즘

[구름톤 챌린지] Day 18 - 중첩 점(동적 프로그래밍)

motti 2023. 9. 12. 17:56
반응형

https://level.goorm.io/exam/195700/%EC%A4%91%EC%B2%A9-%EC%A0%90/quiz/1

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io

해당 문제는 동적 프로그래밍과 시뮬레이션 문제를 혼합한 문제입니다.


문제


풀이

# 입력값을 배열로 넣고 가로(h)-위,아래, 세로(v) - 오른쪽,왼쪽으로 넣음
# 그때 겹치는게 있다면 계산?
# 예를들어, 가로 2개면 0개, 가로 1개, 세로 1개면 1개 , 가로 2개 새로 1개면 2개, 가로 2개 세로 2개면 24개 곱하기 하면 됨

n,m = map(int,input().split())


arr = [ [ [] for _ in range(n)] for _ in range(n) ]

for _ in range(m):
	x,y,direction = input().split()
	x = int(x) - 1
	y = int(y) - 1
	if direction == 'R': # 오른쪽이라면
		while y<n:
			arr[x][y].append('V') # 가로 넣어주기
			y +=1
	elif direction == 'L' : # 왼쪽이라면
		while y>=0:
			arr[x][y].append('V') # 가로 넣어주기
			y -= 1
	elif direction == 'U': # 위쪽이라면
		while x>=0:
			arr[x][y].append('H') # 세로 넣어주기
			x -= 1
	elif direction == 'D': # 아래쪽이라면
		while x<n:
			arr[x][y].append('H')
			x += 1
# print(arr)
from collections import Counter
hap = 0
for i in range(n):
	for j in range(n): 
		cnt = Counter(arr[i][j])
		
		if len(cnt) == 2:
			hap += cnt['V']*cnt['H']
print(hap)

1. 주어진 입력문이 상,하,좌,우에 맞게 V,H (가로,세로) 넣어줌

2. 가로,세로가 둘다 있어 중첩 점이 생긴다면 곱하여 값 갱신

반응형