https://school.programmers.co.kr/learn/courses/30/lessons/181187#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[소스 코드]
// 23.06.12
// https://sirius7.tistory.com/
#include <string>
#include <vector>
#include <cmath>
using namespace std;
long long solution(int r1, int r2) {
long long answer = 0;
for(int i=1;i<r2;i++){
long long result=0;
long long r1r1 = (long long)r1*r1;
long long r2r2 = (long long)r2*r2;
long long ii = (long long)i*i;
long long a; // 안쪽 원 바깥 점 시작범위
long long b; // 바깥 원 안쪽 점 마지막 범위
b = floor(sqrt( abs((long long)r2r2-ii) ));
if(abs(i)<r1){
a = ceil(sqrt( abs(((long long)r1r1-ii))));
result = (b-a+1);
}
else{
a = 1;
result = (b-a+1);
}
answer+=result*4;
}
answer+=(r2-r1+1)*4;
return answer;
}
피타고라스 정리를 이용해서 계산해서 푼 문제 입니다.
안쪽 원의 경계까지의 거리와 바깥 원 경계까지의 거리를 구하는데 <cmath> 를 이용했습니다.
들어오는 값이 굉장히 크기 때문에
r1,r2 값 등을 곱하거나 계산할 때, long long타입으로 형변환을 잊지 않고 해주셔야 오답이 나오지 않습니다.
'학습 정리 > 👨💻 PS Study' 카테고리의 다른 글
[C++] 프로그래머스 - 과제 진행하기 (0) | 2023.06.22 |
---|---|
[C++] 프로그래머스 - 연속된 부분 수열의 합 (0) | 2023.06.21 |
[C++] 프로그래머스 - 공원 산책 (0) | 2023.06.12 |
[C++] 프로그래머스 - 달리기 경주 (0) | 2023.05.19 |
[C++] 프로그래머스 - 성격 유형 검사하기 (0) | 2023.05.15 |