문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/181187

제한 사항

입출력 예


풀이
class Solution {
public long solution(int r1, int r2) {
long answer = 0;
final long r1_pow = (long) r1 * r1;
final long r2_pow = (long) r2 * r2;
for (long x = 1; x < r2; x++) {
if (x < r1) {
long r1Y = (long) Math.floor(Math.sqrt(r1_pow - x * x));
long r2Y = (long) Math.floor(Math.sqrt(r2_pow - x * x));
answer += r2Y - r1Y;
if (r1Y * r1Y + x * x == r1_pow) answer++;
}
else answer += (long) Math.floor(Math.sqrt(r2_pow - x * x));
}
return (answer + (r2 - r1 + 1)) * 4;
}
}
후기
계속 통과가 안 되길래 무엇이 문제인가 봤더니 처음에 반지름의 제곱 값을 구하는 부분에서 반지름 하나를 long형으로 변경해주어야 제대로 된 값이 저장된다. 이것 때문에 계속 다른 코드가 틀렸나 고치기를 반복했다. 중간에 원 위에 있는지 확인해서 정답에 더해주는 부분이 있는데 어떻게 연산을 잘 하면 저 부분을 안 쓰고 위에 통합시킬 수 있을 것 같은데 생각이 잘 안 떠올라서 그냥 이렇게 풀었다. 그리고 풀고나서 생각난건데 Y축 부분의 변수를 굳이 long형을 쓰지 않고 int형으로 했어도 충분했었다...
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 2] 연속된 부분 수열의 합 (0) | 2023.07.17 |
|---|---|
| [프로그래머스][JAVA][Lv. 1] 모의고사 (0) | 2023.07.17 |
| [프로그래머스][JAVA][Lv. 1] 체육복 (0) | 2023.07.16 |
| [프로그래머스][JAVA][Lv. 1] 실패율 (0) | 2023.07.16 |
| [프로그래머스][JAVA][Lv. 1] 3진법 뒤집기 (0) | 2023.07.15 |