728x90
Happy New Year!
url : https://school.programmers.co.kr/learn/courses/30/lessons/181187
수학 문제는 로직 구현시 기존 존재하는 공식이나 정리가 있는지 확인하고, 이를 사용하는 것이 중요하다.
1) x 위치를 기준으로 1~r2 까지 반복문을 돌면서
- x가 작은 원(r1)보다 작을 경우 큰 원에 속한 가장 큰 y점(maxY)과 작은 원에 속하지 않은 가장 작은 y점(minY) 사이의 점 개수를 구한다.
- x가 r1 이상일 경우 작은 원에 의해 가려지는 점(r1에 속한 점)이 없으므로 큰 원에 속한 가장 큰 y점까지 개수를 더한다.
2) y축에 있는 점의 개수를 더한다. (대칭이므로 y축 or x축 중 한 축 위의 점들만 구한다.)
코드
#include <bits/stdc++.h>
int maxY, minY;
using namespace std;
long long solution(int r1, int r2) {
long long answer = 0;
// 1. r1, r2 원 안의 점 구하기
for (int r=1;r<r2;r++){
maxY = floor(sqrt(pow(r2,2) - pow(r, 2)));
minY = ceil(sqrt(pow(r1,2) - pow(r, 2)));
if (r<r1){
answer += (maxY-minY)+1;
}
else answer += maxY;
}
// 2. y축 점 구하기
answer += (r2 - r1) + 1;
// 3. 사분면 고려
answer *= 4;
return answer;
}
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] 147355 : 크기가 작은 문자열, 154540: 무인도 여행, 여담 (0) | 2024.01.03 |
---|---|
[백준] 15654: N과 M(5) (0) | 2024.01.02 |
[백준] 11401 : 이항 계수 3 (0) | 2023.12.31 |
[백준] 11501 : 이항 계수 2 (0) | 2023.12.30 |
[백준] 11050 : 이항 계수 1 (2) | 2023.12.29 |