호지

[프로그래머스] 두 원 사이의 정수 쌍 문제풀이 JS 본문

알고리즘/프로그래머스

[프로그래머스] 두 원 사이의 정수 쌍 문제풀이 JS

_hoji

피타고라스 정의를 활용해서 문제룰 풀었다.

정수쌍은 해당 그래프를 0,0을 기준으로 4개로 나눴을 때,

한 부분의 정수쌍 개수를 구하고 4를 곱하면 된다.

x,y가 모두 양수일 때를 기준으로 정수쌍의 개수를 구하게 되면

x축을 기준으로 1부터 r2까지 순회하면서

x값이 정수일때 y의 값을 구한뒤, 해당 값의 소수점을 자르게 되면(Math.floor)

r2원 안에있는 정수의 개수를 구할 수 있고, (y2)

x값이 r1원 안에 있을 경우를 제외한 정수의 최소값을 알아야 하므로,

이때의 y값을 구한뒤, 소수점을 올리면(Math.ceil)

r1원 밖이나 경계에 해당하는 y의 최소값을 구할 수 있다.(y1)

x값이 r1원 밖이라면 정수의 최소값은 0이다.

 

*y값을 구할 때 Math.sqrt(r**2 - x**2)이 피타고라스 정리를 활용한 것임

 

따라서 y2와 y1사이의 개수를 count에 계속 더하면서 1부터 r2까지 순회를 끝내면

원하는 결과를 얻을 수 있다

function solution(r1, r2) {
  let count = 0
  for (let x = 1; x <= r2; x++) {
    let y2 = Math.floor(Math.sqrt(r2 ** 2 - x ** 2))
    let y1 = r1 > x ? Math.ceil(Math.sqrt(r1 ** 2 - x ** 2)) : 0
    count += y2 - y1 + 1
  }
  return count * 4
}

https://school.programmers.co.kr/learn/courses/30/lessons/181187

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Comments