❓문제 설명
- 두 개의 반지름을 받을 것임 이것을 통해서 만들어진 2개의 원이 있는데 이 원들이 가지는 정수 좌표값 중 공통된 것을 빼고 나머지를 구하는 것임
✅ 문제 해결
- 원의 반지름을 통해서 정수좌표를 어떻게 구할 수 있을지 알아보았으며 x2 + y2 = r2이 공식을 통해서 구할 수 있는 방법을 알아보았음
- 큰 원의 정수좌표를 객체로 만들고 작은 원의 정수좌표를 구할 때 공통된 것이 있다면 객체에서 없애보자.
function solution(r1, r2) {
var answer = 0;
for(var x = 1;x<=r2;x++){
var maxY = Math.floor(Math.sqrt(r2**2 - x**2));
if(r1>x){
var minY = Math.ceil(Math.sqrt(r1**2 - x**2));
}
else{
var minY = 0;
}
answer+= (maxY - minY + 1);
}
return answer*4;
}
- BFS의 개념에 대해서 부족한 부분도 많아서 다른 코드를 참고하면서 만들어 봄
🔥 인상 깊은 남의 풀이
function solution(r1, r2) {
var answer = 0;
for(var x = 1;x<=r2;x++){
var maxY = Math.floor(Math.sqrt(r2**2 - x**2));
if(r1>x){
var minY = Math.ceil(Math.sqrt(r1**2 - x**2));
}
else{
var minY = 0;
}
answer+= (maxY - minY + 1);
}
return answer*4;
}
- 쓸 데 없이 배열에 좌표값을 저장할 필요가 없다. 실제로 사용하지 않기 때문에 이처럼 count만 올리는 방법을 통해서 구현을 하는 것이 좋은 것 같다. 메모리적으로도 코드량으로도 상당히 적은 모습을 보여준다.
❕느낀점
- 생각하는 방식에서 많은 차이가 있는 것 같다 배열을 구해서 차이를 구한다는 식으로 생각을 했었는데 좀 더 사용하는 부분에 대해서만 생각을 해서 count만 하는 방식으로 생각하지 못한것이 아쉽다.
- 전체적으로 2단계로 가니깐 확실히 수학적 계산이나 기본 알고리즘에 대한 지식을 많이 필요로 하는 것 같다.
- Math가 가진 메서드에 대해서도 좀 더 자세하게 알아서 적극적으로 사용해야할 필요성이 있다고 생각한다.