트랙
/
Cairo
Cairo
/
연습 문제
/
우주 시대
우주 시대

우주 시대

쉬움

소개

2525년, 이제 막 태양계의 모든 행성(수성, 금성, 지구, 화성, 목성, 토성, 천왕성, 해왕성)을 둘러보는 여행을 시작했어요. 첫 번째 목적지는 수성인데, 여기 세관에서는 서류를 작성해야 해요(관료주의는 지구만의 것이 아닌가 봐요). 서류를 세관원에게 건네자, 세관원은 서류를 자세히 살펴보더니 얼굴을 찌푸려요. "정말 나이가 50살이라고 믿으라는 거예요? 200살은 되어 보이는데!"

재미있다고 생각하며 세관원이 웃음을 터뜨리기를 기다렸지만, 세관원은 아주 진지해 보여요. 알고 보니 나이는 지구 년 으로 적었는데, 세관원은 수성 년 으로 기대한 거예요! 수성의 태양 주위 공전 주기는 지구보다 훨씬 짧기 때문에, 수성 년으로 따지면 실제로는 훨씬 나이가 많아요. 재빨리 계산한 끝에 수성 년으로 나이를 알려줄 수 있었어요. 세관원은 만족한 듯 웃으며 통과시켜 줘요. 앞으로 이런 착오를 겪지 않으려면 세관 검사 전에 행성별 나이를 미리 계산해 두어야겠다고 마음속에 새겨 둬요.

Note

명왕성이 왜 빠졌는지 궁금하다면, 이 YouTube 영상을 봐요.

지침

나이가 초 단위로 주어지면, 태양계의 행성에서 그 사람이 몇 살이 되는지 계산해요.

지구의 1년은 365.25 지구일, 즉 31,557,600초예요. 누군가의 나이가 1,000,000,000초라고 하면, 그 사람의 나이는 지구 년으로 31.69살이에요.

다른 행성의 경우에는 지구 년으로 나타낸 공전 주기를 고려해야 해요:

행성 지구 년으로 나타낸 공전 주기
수성 0.2408467
금성 0.61519726
지구 1.0
화성 1.8808158
목성 11.862615
토성 29.447498
천왕성 84.016846
해왕성 164.79132
Note

지구가 태양 주위를 한 바퀴 완전히 도는 실제 시간은 365.256일(항성년 1년)에 더 가까워요. 그레고리력은 평균적으로 365.2425일이에요. 완전히 정확하지는 않지만, 이 연습 문제에서는 365.25를 사용해요. 1년을 재는 더 다양한 방법은 위키백과의 년 문서를 참고해요.

구현

Cairo에서는 부동소수점 수를 기본으로 지원하지 않기 때문에, 소수 값을 정수로 표현해요.

이 방식은 블록체인 개발에서 계산의 정밀도를 유지하는 데 꼭 필요해요.

이 연습 문제에서는 공전 주기를 마이크로초로 변환하여 고정소수점 연산을 사용해요.

예를 들어, 수성의 공전 주기인 0.2408467 지구년은 1,000,000을 곱하면 240,846,700 마이크로초가 돼요.

소수점 정밀도를 고려하기 위해, 테스트 케이스에서는 결과 나이가 소수점 두 자리를 가지며, 정수로 표현된다고 가정해요.

즉, 나이가 31.69년인 경우 코드에서는 3169로 저장돼요.

이를 위해 나눗셈을 하기 전에 100을 곱해요.

다음은 예시예요:

let mercury_orbital_period = 240_846_700; // in microseconds
let age_microseconds = age_seconds * 1_000_000;
// multiplying with 100 to retain 2 decimal places
age_microseconds * 100 / mercury_orbital_period

이 방법을 사용하면 필요한 소수점 두 자리 정밀도를 유지하면서 소수 값을 정확하게 정수로 표현할 수 있어요. 이는 테스트를 통과하는 데 꼭 필요해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Cairo Exercism

우주 시대 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Cairo 트랙을 개념 25개연습 문제 68개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.