알고리즘 - freeCodeCamp - Map the Debris

NO PAIN, NO GAIN·2019년 12월 20일
0

algorithm

목록 보기
18/18

문제

{ name: "name", avgAlt: "avgAlt"} 에서 avgAltaverage altitude이며 평균 고도를 나타낸다. 고도는 지구 표면에서 물체가 떨어져 있는 높이를 나타낸다. 이 문제는 지구를 기준으로 떨어져 있는 달, 위성, 화성... 등의 평균고도의 값이 있는 객체형태를 배열 안에 나열되어있다. avgAltorbitalPeriod로 바꿔서 새로운 배열로 반환해야한다.

예시

orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]) 
--> [{name: "sputnik", orbitalPeriod: 86400}]

orbitalPeriod([{name: "iss", avgAlt: 413.6}, {name: "hubble", avgAlt: 556.7}, {name: "moon", avgAlt: 378632.553}]) 
--> [{name : "iss", orbitalPeriod: 5557}, {name: "hubble", orbitalPeriod: 5734}, {name: "moon", orbitalPeriod: 2377399}]

풀이

function orbitalPeriod(arr) {
  var GM = 398600.4418;
  var earthRadius = 6367.4447;
  const calculate = val => {
    const { name, avgAlt } = val;
    const orbitalsSemiMajorAxis = earthRadius + avgAlt; // 지구 중심에서 물체까지의 거리
    const orbitalPeriod = Math.round(
      2 * Math.PI * Math.sqrt(
        Math.pow(orbitalsSemiMajorAxis, 3) / GM
      )
    )
    return { name, orbitalPeriod };
  }
  return arr.map(calculate);
}

공전 주기를 구하는데 필요한 참고자료를 제공해 준다.
https://en.wikipedia.org/wiki/Orbital_period
위에 나와 있는 공식을 이해하는데 시간이 걸렸다. orbitalsSemiMajorAxis만 알면 나머지는 공식대로 적절할 메소드를 사용했다.

profile
갈고 닦자.

1개의 댓글

comment-user-thumbnail
2020년 2월 29일

기빈님 요즘 블로그를 왜 안하시나요..ㅜㅜ

답글 달기