문제: https://school.programmers.co.kr/learn/courses/30/lessons/181187
정답 코드: https://github.com/ji-yeon224/coding-test/blob/master/programmers/%EB%91%90_%EC%9B%90_%EC%82%AC%EC%9D%B4%EC%9D%98_%EC%A0%95%EC%88%98_%EC%8C%8D/Solution.java
for(int i=0; i<= r2; i++){ //x가 i일 때의 y좌표
double xpow = Math.pow(i, 2);
if(i > r1) r1pow = 0;
double y1 =0;
if(r1pow != 0){
y1 = Math.sqrt(r1pow - xpow); //작은원
if(y1 > Math.floor(y1)){
y1 = Math.ceil(y1);
}
}
double y2 = Math.sqrt(r2pow - xpow); //큰원
if(y2 > Math.floor(y2)){
y2 = Math.floor(y2);
}
answer += (int)y2 - (int)y1 + 1;
}
import java.util.*;
class Solution {
public long solution(int r1, int r2) {
long answer = 0;
double r1pow = Math.pow(r1, 2);
double r2pow = Math.pow(r2, 2);
int onLine = (r2 - r1 + 1)*4; //선 위에 있는 좌표 개수
for(int i=0; i<= r2; i++){ //1사분면만 계산
double xpow = Math.pow(i, 2);
if(i > r1) r1pow = 0;
double y1 =0;
if(r1pow != 0){
y1 = Math.sqrt(r1pow - xpow); //작은원
if(y1 > Math.floor(y1)){
y1 = Math.ceil(y1);
}
}
double y2 = Math.sqrt(r2pow - xpow); //큰원
if(y2 > Math.floor(y2)){
y2 = Math.floor(y2);
}
answer += (int)y2 - (int)y1 + 1;
}
return answer*4 - onLine; //중복 계산된 점 빼주기
}
}