문제 정의
날짜 객체(Date 객체)를 입력으로 받아, 해당 생년월일에 대응하는 별자리(점성술 기호)를 반환하는 JavaScript 함수를 작성해야 합니다.
예제 코드
다음은 이 문제를 해결하는 코드입니다 −
const date = new Date();
// 2021년 4월 2일 기준
const findSign = (date) => {
const days = [21, 20, 21, 21, 22, 22, 23, 24, 24, 24, 23, 22];
const signs = ["Aquarius", "Pisces", "Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn"];
let month = date.getMonth();
let day = date.getDate();
if(month == 0 && day <= 20){
month = 11;
}else if(day < days[month]){
month--;
};
return signs[month];
};
console.log(findSign(date));
출력 결과
Aries
이 코드는 현재 날짜를 기준으로 실행되기 때문에, 함수를 실행하는 시점에 따라 출력 결과가 달라질 수 있습니다. 예를 들어 2021년 4월 2일에 실행하면 'Aries'(양자리)가 출력됩니다.
코드 동작 원리
이 함수의 핵심 로직을 단계별로 살펴보겠습니다.
- days 배열: 각 월(0~11)에서 별자리가 바뀌는 기준 날짜를 저장합니다. 예를 들어 첫 번째 값 21은 1월의 경우 21일부터 물병자리가 시작됨을 의미합니다.
- signs 배열: 물병자리부터 염소자리까지 12개 별자리 이름을 순서대로 저장합니다.
- 1월 경계 처리: 1월(month === 0)이면서 날짜가 20일 이하라면, 이전 해 12월의 염소자리(Capricorn)에 해당하므로 month를 11로 변경합니다.
- 별자리 전환일 판별: 입력된 일(day)이 해당 월의 전환일보다 작으면, 아직 이전 달의 별자리 범위에 속하므로 month를 1 감소시킵니다.
마지막으로 조정된 month 인덱스를 사용해 signs 배열에서 별자리 이름을 반환합니다.
한글 별자리 이름으로 표시하기
반환값을 한글로 표시하고 싶다면 signs 배열만 다음과 같이 한글 이름으로 교체하면 됩니다.
const signs = ["물병자리", "물고기자리", "양자리", "황소자리", "쌍둥이자리", "게자리", "사자자리", "처녀자리", "천칭자리", "전갈자리", "사수자리", "염소자리"];
나머지 로직은 그대로 유지한 채, 같은 방식으로 한글 별자리 이름을 바로 얻을 수 있습니다.