문제
일반적인 컴퓨터 이미지는 픽셀의 행렬로 이루어져 있으며, 각 픽셀은 특정 색의 작은 정사각형이다. 픽셀 행렬의 축에 완전히 평행하지 않은 선을 그리면 결함이 생기기 쉽다. 원은 그런 결함이 특히 두드러지는 대표적인 예이다.
set_pixel_to_black(x, y)는 행
draw_circle_perimeter(R):
for x between -R and R, inclusive {
y = round(sqrt(R * R - x * x)) # round to nearest integer, breaking ties towards zero
set_pixel_to_black(x, y)
set_pixel_to_black(x, -y)
set_pixel_to_black(y, x)
set_pixel_to_black(-y, x)
}
이 코드에 의해 어떤 픽셀은 여러 번 검은색으로 설정될 수 있다.
하지만 이 연산은 멱등(idempotent)이다.
즉, 이미 검은색인 픽셀에 대해 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 # 형식의 한 줄을 출력하라.
여기서 draw_circle_filled(draw_circle_filled_wrong(
예제
3
2
8
50
Case #1: 4
Case #2: 24
Case #3: 812