문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/181187
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
수학적인 사고능력이 필요한 문제였습니다.
알고리즘은 아래와 같습니다.
1. 원은 상하좌우 대칭이므로 (1 사분면 내 조건에 맞는 좌표들의 개수) * 4를 하면 정답이 나옵니다.
2. 따라서 [1, r2] 구간의 좌표들을 구하는데 이때 r1, r2, 그리고 x의 값이 연산 중 int 범위를 초과하며 오버플로우가 발생할 수 있으므로 x * 1LL * x와 같이 처리하여 int 범위를 초과하더라도 연산값이 잘 저장되도록 처리해 줍니다.
2.1 minY와 maxY는 피타고라스의 정리를 연상하면 쉽게 구할 수 있습니다.
3. 1번에서 설명했듯이 2번에서 구한 값에 4를 곱한 뒤 반환해 줍니다.

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <string> | |
#include <vector> | |
#include <cmath> | |
using namespace std; | |
long long solution(int r1, int r2) { | |
long long answer = 0; | |
for (int x = 1; x <= r2; x++) | |
{ | |
long long maxY = floor(sqrt(r2 * 1LL * r2 - x * 1LL * x)); | |
long long minY = x >= r1 ? 0 : ceil(sqrt(r1 * 1LL * r1 - x * 1LL * x)); | |
answer += (maxY - minY + 1); | |
} | |
return answer * 4; | |
} |

개발환경: Programmers IDE
지적, 조언, 질문 환영합니다! 질문 남겨주세요~
반응형
'알고리즘 > programmers' 카테고리의 다른 글
[Programmers] 2차원 동전 뒤집기 (0) | 2023.10.20 |
---|---|
[Programmers] COS Pro 1급 C 모의고사 (0) | 2023.09.05 |
[Programmers] 과제 진행하기 (0) | 2023.08.17 |
[Programmers] 연속된 부분 수열의 합 (0) | 2023.08.13 |
[Programmers] 요격 시스템 (0) | 2023.08.11 |