반응형
SMALL
문제 설명
x축과 y축으로 이루어진 2차원 직교 좌표계에 중심이 원점인 서로 다른 크기의 원이 두 개 주어집니다. 반지름을 나타내는 두 정수 r1, r2가 매개변수로 주어질 때, 두 원 사이의 공간에 x좌표와 y좌표가 모두 정수인 점의 개수를 return하도록 solution 함수를 완성해주세요.
※ 각 원 위의 점도 포함하여 셉니다.
연습 겸 우연히 눌렀는데 내가 최근 몇번 풀어본 유형의 문제가 나왔다
이 경우 x, y 중첩 반복문을 돌리면 시간초과로 100점을 받을 수 없고,
x의 반복문 만으로 y값을 추론해서 하면 시간초과 문제는 없어짐
그런식으로 반복하던 중, 거의 정답에 가깝다고 생각했는데 점수가 계속 안나옴
그 이유는
function solution(r1, r2) {
var answer = 0;
let smallR = Math.min(r1, r2)
let bigR = Math.max(r1, r2)
let smallRsqr = smallR * smallR
let bigRsqr = bigR * bigR
// smallRsqr <= x*x + y*y <= bigRsqr
// smallRsqr - x*x <= y*y <= bigRsqr - x*x
// x 는 0일때 구하고, y는 0일때 안구한 1사분면에 4곱하면 정답
for(let x = 0 ; x <= bigR; x++){
let yMin
if(smallRsqr - x*x <= 0)
yMin = 1
else
yMin = Math.ceil(Math.sqrt(smallRsqr - x*x))
let yMax = parseInt(Math.sqrt(bigRsqr - x*x))
answer+= yMax - yMin + 1
}
return answer*4;
}
smallRsqr - x*x <= 0 이부분 때문이었다
저게 음수로 빠지게되면 아예 continue하게 했었는데, 뭔가 이상해서 1로 주도록 변경하니 클리어
주어진 테스트케이스가 1개밖에 없어서 원인을 의아해하다가
문제 풀이에서 다른 테스트케이스를 올려주신 분 덕분에 검토해서 통과할 수 있었다
<추가 테스트 케이스>
r1, r2, answer
2, 4, 40
9, 20, 1008
10, 20, 952
999999, 1000000, 6281440
반응형
LIST
'기술 > 코딩테스트 연습' 카테고리의 다른 글
| [프로그래머스 코딩테스트 연습] 올바른 괄호 - javascript (0) | 2023.05.12 |
|---|---|
| [프로그래머스 코딩테스트 연습] 괄호 회전하기 - javascript (0) | 2023.05.12 |
| [프로그래머스 코딩테스트 연습] 세 수를 합하여 소수 갯수 구하기 - javascript (0) | 2023.05.04 |
| [프로그래머스 코딩테스트 연습] 점찍기 - javascript (0) | 2023.04.19 |
| [프로그래머스 코딩테스트 연습] 옹알이(1) - javascript (0) | 2023.03.27 |