작성일 :

문제 링크

7572번 - 간지(干支)

설명

주어진 연도를 육십갑자(간지) 체계에 따라 두 자리 코드로 변환하는 문제입니다.

  • 간지 표기법은 10간(갑을병정무기경신임계)과 12지(자축인묘진사오미신유술해)의 조합으로 이루어져 있습니다.
  • 이 문제에서는 알파벳 'A'부터 'L'까지 12지를, 숫자 '0'부터 '9'까지 10간을 사용하여 조합한 2자리 문자열을 출력합니다.
  • 기준 연도는 2013년, 기준 문자는 'F9'입니다.
  • 입력으로 연도 Y가 주어졌을 때, 2013년과의 차이만큼 알파벳과 숫자를 각각 순회시켜 출력합니다.

접근법

  • 입력받은 연도에서 기준 연도 2013을 뺀 차이를 계산합니다.
  • 알파벳 부분은 'F'에서 12진법 순환으로 계산하여 'A'~'L' 범위로 맞춥니다.
  • 숫자 부분은 '9'에서 10진법 순환으로 계산하여 '0'~'9' 범위로 맞춥니다.
  • 두 문자를 합쳐 출력하면 해당 연도의 간지(干支) 표기 결과가 됩니다.

Code

[ C# ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;

class Program {
  static void Main() {
    int year = int.Parse(Console.ReadLine());
    int diff = year - 2013;

    char g = (char)('F' + diff % 12), z = (char)('9' + diff % 10);

    if (g > 'L') g -= (char)12;
    else if (g < 'A') g += (char)12;

    if (z > '9') z -= (char)10;
    else if (z < '0') z += (char)10;

    Console.WriteLine($"{g}{z}");
  }
}



[ C++ ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>

using namespace std;

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

  int year; cin >> year;
  int diff = year - 2013;
  char g = 'F' + diff % 12, z = '9' + diff % 10;

  if (g > 'L') g -= 12;
  else if (g < 'A') g += 12;

  if (z > '9') z -= 10;
  else if (z < '0') z += 10;

  cout << g << z << "\n";

  return 0;
}