알고리즘
픽셀 수 세기
개발 초보
2023. 6. 19. 01:00
"구름 에듀의 10주 완성 알고리즘 코딩테스트" 강추
너무 좋습니다. 강사님이 시나리오를 하나씩 분해해서, 더 쉽고 효율적인 방법으로 코드를 작성하십니다. 강의를 통해 배울 수 있다는 것이 감사할 따름입니다. 알고리즘 공부를 고민하고 계신 분들이시라면 위 강의 한 번 찜해보시는 것도 좋을 것 같습니다.
import java.io.*;
import java.lang.*;
import java.util.*;
public class Main {
public static final Scanner scanner = new Scanner(System.in);
/**
* 왼쪽 아래 좌표가 (x,y)인 픽셀이 반지름 R인 원(정확히는 1사분면)에 포함되는가?
* --> 원점과 중점이 같다면, 원을 4등분해서 1사분면의 픽셀 수만 구하면 된다.
* @param x
* @param y
* @param R
* @return 포함된다면 true, else false
*/
public static boolean isInside(long x, long y, long R){
long sqd = x*x + y*y;
return sqd < R*R;
}
public static void testCase(int caseIndex) {
long R = scanner.nextLong();
long sum = 0;
long y = R;
for(int x=0; x<=R; x+=1){
for(; y>=0; y-=1){
if(isInside(x,y,R)){
//y := x좌표에서 위에서부터 내려오다가 최초로 원에 포함되는 픽셀의 y 좌표
long h = y+1;
sum += h;
break;
}
}
}
System.out.printf("#%d\n", caseIndex);
System.out.println(sum*4);
}
public static void main(String[] args) throws Exception {
int caseSize = scanner.nextInt();
for (int caseIndex = 1; caseIndex <= caseSize; caseIndex += 1) {
testCase(caseIndex);
}
}
}