문제
한 변의 길이가 N인 정사각형이 있다. 플레이어는 이 정사각형 위에 M개의 반직선을 그린 뒤, 두 반직선이 교차하는 점의 수를 세려고 한다.
플레이어가 반직선을 그리는 과정은 아래와 같다.
- 반직선을 그리기 시작할 칸 (y,x)를 정한다. (x,y)는 주어진 정사각형을 크기의 정사각형으로 나눴을 때,y 번째 행의 x번째 열에 해당하는 칸이다.
- 반직선을 그릴 방향 를 정한다.
- 방향은 상하좌우 중 하나이며, 항상 정사각형 테두리의 가로 혹은 세로와 평행하다.
- 반직선을 그린다.
- 반직선은 항상 시작 칸의 테두리에서부터 시작하며, 같은 칸을 지나는 평행한 직선이 서로 만나지 않도록 그린다.
풀이
def count_intersections(N, M, lines):
vertical = [[0]*N for _ in range(N)]
horizontal = [[0]*N for _ in range(N)]
for y, x, d in lines:
y = int(y)
x = int(x)
y -= 1
x -= 1
if d == 'R':
for i in range(x, N):
vertical[y][i] += 1
elif d == 'L':
for i in range(0, x+1):
vertical[y][i] += 1
elif d == 'U':
for i in range(0, y+1):
horizontal[i][x] += 1
elif d == 'D':
for i in range(y, N):
horizontal[i][x] += 1
total_intersections = 0
for i in range(N):
for j in range(N):
total_intersections += vertical[i][j] * horizontal[i][j]
return total_intersections
N,M = map(int,input().split())
lines = [tuple(input().split()) for _ in range(M)]
print(count_intersections(N, M, lines))
728x90
'알고리즘 풀이' 카테고리의 다른 글
Goorm_연결 요소하기 (1) | 2023.09.08 |
---|---|
Goorm_대체 경로 (0) | 2023.09.07 |
Goorm_통신망 분석 (0) | 2023.09.05 |
Goorm_연합 (0) | 2023.09.04 |
Goorm _작은 노드 (0) | 2023.08.31 |