반응형
1. 풀이
행렬에서 한 점을 축으로 하고, 90도로 회전할 때, 이를 식으로 나타낼 수 있다.
축으로 하는 점을 (x,y), 90도로 회전시킬 점을 (a,b), 회전된 점을 (A,B)라고 할 때
(1) 시계방향으로 회전
A=x-y+b
B=x+y-a
(2) 반시계방향으로 회전
A=x+y-b
B=-x+y+a
2. 소스코드
x,y를 각각 행과 열로 바꿔서 생각하면, 시계방향이 아닌 반시계 방향으로 움직여야 하고,
입력값 d도 (x는 행, y는 열로) 다르게 생각해 주어야 한다.
N=int(input())
myMap=[[0 for _ in range(101)] for _ in range(101)]
dR=[1,0,-1,0]
dC=[0,-1,0,1]
for i in range(N):
r,c,d,g=map(int,input().split())
curve=[[r,c],[r+dR[d],c+dC[d]]]
axis=[r+dR[d],c+dC[d]]
nextAxis=[0,0]
# 기준에 1찍기
for a,b in curve:
myMap[a][b]=1
# 세대시작
for gen in range(g):
# 기준제외 모든점 돌아서 찍힌다
for j in range(len(curve)):
# 회전
newA=axis[0]+axis[1]-curve[j][1]
newB=-axis[0]+axis[1]+curve[j][0]
if (j==0):
nextAxis[0]=newA
nextAxis[1]=newB
if not (newA==axis[0] and newB==axis[1]):
curve.append([newA,newB])
myMap[newA][newB]=1
# 기준교체
axis[0]=nextAxis[0]
axis[1]=nextAxis[1]
ans=0
for i in range(100):
for j in range(100):
if (myMap[i][j] and myMap[i][j+1] and myMap[i+1][j] and myMap[i+1][j+1]):
ans+=1
print(ans)
반응형