작성일 :

문제 링크

31097번 - Astrology

설명

주어진 날짜가 어느 별자리 기간에 속하는지 판단하여 별자리 이름을 출력하는 문제입니다.


접근법

날짜에서 월과 일을 추출한 뒤 12개 별자리 구간과 비교합니다. 각 별자리는 특정 월의 특정 일부터 다음 월의 특정 일까지 해당하므로, 월과 일 조합으로 분기 처리합니다. 연말연초에 걸치는 염소자리는 12월과 1월 양쪽을 모두 확인합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;

class Program {
  static void Main() {
    var s = Console.ReadLine()!;
    var month = int.Parse(s.Substring(5, 2));
    var day = int.Parse(s.Substring(8, 2));

    string sign = month switch {
      3 when day >= 21 => "Aries",
      4 when day <= 19 => "Aries",
      4 when day >= 20 => "Taurus",
      5 when day <= 20 => "Taurus",
      5 when day >= 21 => "Gemini",
      6 when day <= 20 => "Gemini",
      6 when day >= 21 => "Cancer",
      7 when day <= 22 => "Cancer",
      7 when day >= 23 => "Leo",
      8 when day <= 22 => "Leo",
      8 when day >= 23 => "Virgo",
      9 when day <= 22 => "Virgo",
      9 when day >= 23 => "Libra",
      10 when day <= 22 => "Libra",
      10 when day >= 23 => "Scorpio",
      11 when day <= 22 => "Scorpio",
      11 when day >= 23 => "Sagittarius",
      12 when day <= 21 => "Sagittarius",
      12 when day >= 22 => "Capricorn",
      1 when day <= 19 => "Capricorn",
      1 when day >= 20 => "Aquarius",
      2 when day <= 18 => "Aquarius",
      2 when day >= 19 => "Pisces",
      3 when day <= 20 => "Pisces",
      _ => ""
    };

    Console.WriteLine(sign);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  string s; cin >> s;
  int month = stoi(s.substr(5, 2));
  int day = stoi(s.substr(8, 2));

  string sign;
  if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) sign = "Aries";
  else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) sign = "Taurus";
  else if ((month == 5 && day >= 21) || (month == 6 && day <= 20)) sign = "Gemini";
  else if ((month == 6 && day >= 21) || (month == 7 && day <= 22)) sign = "Cancer";
  else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) sign = "Leo";
  else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) sign = "Virgo";
  else if ((month == 9 && day >= 23) || (month == 10 && day <= 22)) sign = "Libra";
  else if ((month == 10 && day >= 23) || (month == 11 && day <= 22)) sign = "Scorpio";
  else if ((month == 11 && day >= 23) || (month == 12 && day <= 21)) sign = "Sagittarius";
  else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) sign = "Capricorn";
  else if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) sign = "Aquarius";
  else sign = "Pisces";

  cout << sign << "\n";

  return 0;
}