링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181187
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
원의 방정식을 이용한 풀이를 사용했다.
x^2 + y^2 = r^2
입출력 예시를 사용해보면 다음과 같다.
x = 1일 경우,
y의 최대 값은 y^2 = 9 - 1 = 8로 2.8xxxx
y의 최소 값은 y^2 = 4 - 1 = 3으로 1.7xxx
x가 2일 경우,
y의 최대 값은 y^2 = 9 - 4 = 5로 2.2xxx
y의 최소 값은 y^2 = 4 - 4 = 0으로 0
x가 3일 경우,
y의 최대 값은 y^2 = 9 - 9 = 0으로 0
y의 최소 값은 y^2 = 4 - 9 = 0으로 0
-> 이후 최대 값과 최소 값 사이의 점의 개수를 구하면 된다.
import java.util.*;
class Solution {
public long solution(int r1, int r2) {
long answer = 0;
for(int i=1; i<=r2; i++) {
// ceil : 올림
// floor : 내림
// sqrt : 루트
int maxY = (int) Math.floor(Math.sqrt((long) r2*r2 - (long) i*i));
int minY = (int) Math.ceil(Math.sqrt((long) r1*r1 - (long) i*i));
answer += maxY - minY + 1;
}
return answer * 4;
}
}
마지막 4개 테스트 케이스가 계속 실패했는데, 자료형 때문인 것으로 파악...
매게변수 r1과 r2를 int형으로 받았기 때문에 각각 5자리 이상의 수인 경우 이 둘을 곱하면 오버플로우가 발생한 것으로 보인다.
따라서 이를 long으로 변환하는 과정이 필요하다..!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 혼자서 하는 틱택토(Java) (3) | 2024.02.28 |
|---|---|
| [프로그래머스] 무인도 여행(Java), 너비 우선 탐색(BFS) 알고리즘 (0) | 2024.02.14 |
| [프로그래머스] 숫자 변환하기(Java), DP & BFS 알고리즘 (1) | 2024.02.13 |
| [프로그래머스] 시소 짝궁(Java) (1) | 2024.02.06 |
| [프로그래머스] 호텔 대실(Java), 2차원 배열 정렬 (2) | 2024.01.31 |