알고리즘/구현

[백준]프렉탈 평면 #구현

씩씩한 IT블로그 2020. 6. 18. 22:24
반응형

1.풀이

0으로 모두 초기화 시켜놓고, 검사해야하는 점 마다 time=1일때 부터 time=s 까지 중 언제 색칠됐전 점인지를 확인해준다.

(정확히 말하면 time=1이 가장 마지막으로 색칠된 점이고, time=s가 가장 처음 색칠된 점)

ex) 예시

i,j가 검은점인지 아래의 순서대로 확인해준다. (색이 칠해졌음이 확인되었으면 바로 다음 점 확인)

1*1검은 점에 속해있는지 time=1일때

3*3검은 점에 속해있는지 time=2일때

5*5검은 점에 속해있는지 time=3일때

이때 짝수와 홀수일 때 범위가 달라지는것에 주의한다.

2. 소스코드

import sys
s,N,K,R1,R2,C1,C2=map(int,input().split())
#시간 0이면 그냥끝
if s==0:
    print("0")
    sys.exit()

#ans에 넣을때는 행은 -R1, 열은 -C1 꼭해줘라
ans=[["0" for j in range(C2-C1+1)] for i in range(R2-R1+1)]

for i in range(R1,R2+1):
    for j in range(C1,C2+1):
        for time in range(1,s+1):
            #홀수이면
            if N%2==1:
                if ((N**time)//2)-((N**(time-1))*K)//2 <= (i%(N**time)) <= ((N**time)//2)+((N**(time-1))*K)//2 and ((N**time)//2)-((N**(time-1))*K)//2 <= (j%(N**time)) <=((N**time)//2)+((N**(time-1))*K)//2:
                    ans[i-R1][j-C1]="1"
            #짝수이면
            else:
                if ((N**time)//2)-((N**(time-1))*K)//2 <= (i%(N**time)) < ((N**time)//2)+((N**(time-1))*K)//2 and ((N**time)//2)-((N**(time-1))*K)//2 <= (j%(N**time)) <((N**time)//2)+((N**(time-1))*K)//2:
                    ans[i - R1][j - C1] = "1"
            #색칠되면 다음꺼
            if ans[i-R1][j-C1]=="1":
                break

for i in ans:
    print("".join(i))
반응형