문제
https://school.programmers.co.kr/learn/courses/30/lessons/181187#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
1. 먼저 x, y선에 존재하는 좌표의 개수를 구해서 더해준다.
2. 사분면 안에서 좌표의 개수를 구해준다.
2-1. 큰 원의 좌표의 개수를 구하고 작은원의 좌표의 개수를 뺀다. 이때 곱하기를 할때 꼭 타입 캐스팅을 해줘야 한다.
2-2. 작은원이 좌표가 정수 좌표를 지날 경우에는 1을 더해준다.
코드
class Solution {
public long solution(int r1, int r2) {
long answer = 0;
answer += (r2-r1+1)*4;
long count = 0;
for(int i=1;i<r2;i++){
long y2 = (long)r2*r2 - (long)i*i;
double y = Math.sqrt(y2);
count += Math.floor(y);
}
for(int i=1;i<r1;i++){
long y2 = (long)r1*r1 - (long)i*i;
double y = Math.sqrt(y2);
count -= Math.floor(y);
if(Math.floor(y) == y) count+=1; //작은원이 지나는 것이 정수
}
answer += count * 4;
return answer;
}
}