픽셀화된 원
메모리 제한1024 MB
반지름 R이 주어질 때, 거리를 반올림해 채운 원과 반지름 0부터 R까지 둘레를 겹쳐 그린 그림에서 색이 다른 픽셀 수를 구합니다.
문제
일반적인 컴퓨터 화면 이미지는 단색의 작은 정사각형인 픽셀이 모인 행렬이다. 픽셀 행렬의 축과 완전히 평행하지 않은 선을 그리면 왜곡이 생긴다. 원을 그릴 때 이 왜곡이 특히 두드러진다.
가로세로 픽셀인 그림이 있다고 하자. 행과 열은 부터 까지 번호를 매기며, 가운데 픽셀이 행 0, 열 0이 된다. 처음에는 모든 픽셀이 흰색이다. 그림 중앙에 있는 반지름 의 원은 아래 의사코드로 검은색으로 그릴 수 있다. set_pixel_to_black(x, y)는 행 x, 열 y의 픽셀을 검은색으로 칠한다.
draw_circle_perimeter(R):
for x between -R and R, inclusive {
y = round(sqrt(R * R - x * x)) # 가장 가까운 정수로 반올림하되, 동점이면 0 쪽으로 반올림
set_pixel_to_black(x, y)
set_pixel_to_black(x, -y)
set_pixel_to_black(y, x)
set_pixel_to_black(-y, x)
}
같은 픽셀이 여러 번 검은색으로 칠해질 수 있지만, 이 연산은 멱등이다. 이미 검은 픽셀에 set_pixel_to_black을 다시 호출해도 아무것도 바뀌지 않는다.
다음 의사코드는 모두 흰색인 그림에서 시작해 채워진 원을 그린다.
draw_circle_filled(R):
for x between -R and R, inclusive {
for y between -R and R, inclusive {
if round(sqrt(x * x + y * y)) ≤ R:
set_pixel_to_black(x, y)
}
}
다음 의사코드는 채워진 원을 잘못 그린다.
draw_circle_filled_wrong(R):
for r between 0 and R, inclusive {
draw_circle_perimeter(r)
}
이 주어졌을 때, draw_circle_filled()을 호출한 그림과 draw_circle_filled_wrong()을 호출한 그림에서 색이 다른 픽셀의 개수를 구하라.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다. 이어서 개의 줄에 테스트 케이스가 한 줄씩 주어지며, 각 줄에는 그릴 원의 반지름 을 나타내는 정수 하나가 있다.
출력
각 테스트 케이스마다 한 줄에 Case #x: y를 출력한다. 여기서 x는 테스트 케이스 번호(1부터 시작)이고, y는 draw_circle_filled()을 호출한 그림과 draw_circle_filled_wrong()을 호출한 그림에서 색이 다른 픽셀의 개수이다.
제한
.
힌트
샘플 케이스 1에서 draw_circle_filled(2)는 검은 픽셀 21개를 그린다(왼쪽 그림). draw_circle_filled_wrong(2)는 검은 픽셀 17개를 그린다(오른쪽 그림). 두 그림에서 색이 다른 픽셀은 네 개이며, , , , 이다. 여기서 는 행 x, 열 y의 픽셀을 뜻한다.

샘플 케이스 2에서 왼쪽 그림은 draw_circle_filled(8)로, 오른쪽 그림은 draw_circle_filled_wrong(8)로 생성된 것이다.
