백준 15685 드래곤커브

gmlwlswldbs·2021년 9월 26일
0

코딩테스트

목록 보기
36/130
n = int(input())
check = [[0] * 101 for _ in range(101)]    
def curve(d, g):
    drt = [d]
    for k in range(g):
        for i in range(len(drt)-1,-1,-1):
            u = (drt[i]-1) % 4
            if u == 0 or u == 2:
                drt.append(2-u)
            elif u == 1 or u == 3:
                drt.append(4-u)
    return drt    

dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]

curve_on = []
def curve_where(x, y, drt):
    curve_on.append((x, y))
    for i in drt:
        nx, ny = x + dx[i], y + dy[i]
        x, y = nx, ny
        if nx < 0 or ny < 0 or nx > 100 or ny > 100:
            continue
        curve_on.append((nx, ny))
        
for _ in range(n):
    y, x, d, g = map(int, input().split())
    drt = curve(d, g)
    curve_where(x, y, drt)
    
print(curve_on)    

for x, y in curve_on:
    check[x][y] = 1

cnt = 0
for i in range(100):
    for j in range(100):
        if check[i][j] == 1 and check[i+1][j] == 1 and check[i+1][j+1] == 1 and check[i][j+1] == 1:
            cnt += 1
print(cnt)

나의 문제
1. 정사각형 구하는 걸 복잡하게 생각 : 간단하게 check 와 for 문으로 해결하면 될걸 배열을 만들어서 거기 모든 정사각형을 넣고 확인하려고 듬.
2. 이 문제의 x, y가 행렬이 뒤바뀌어 있었는데 그냥 x = 행 y = 열 이라고 생각함. 입혁시 y, x 순서를 바꿔서 해결하긴 했지만 이런 문제에 적응이 필요해보이긴 한다

구현은
<세대별 드래곤 커브의 방향 변화 찾기 -> 이에 따라 이동하며 좌표, check 배열에 표시 -> cnt 세기>

0개의 댓글