작성일 :

문제 링크

27908번 - Kalendar

설명

달력을 구현하는 문제입니다.

달력에 대한 문제의 조건은 다음과 같습니다.

  1. 날짜가 한 자리 숫자인 경우, '..X' 로 표시
  2. 날짜가 두 자리 숫자인 경우, '.XY' 로 표시
  3. 일주일이 7일 미만으로 이루어진다면, 빈 요일에는 '...' 로 표시
  4. 상단과 하단을 '-' 으로, 좌우는 '|' 으로, 모서리는 '+' 으로 표시

입력으로 주어지는 nd 를 통해 해당 달의 총 날짜와 시작 요일을 구한 후,

위 조건들에 맞추어 달력을 출력합니다.


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
namespace Solution {
  class Program {
    static void Main(string[] args) {

      Action printLine = () => {
        Console.Write("+");
        for (int i = 0; i < 21; ++i)
          Console.Write("-");
        Console.WriteLine("+");
      };

      var input = Console.ReadLine()?.Split();
      var n = int.Parse(input![0]);
      var d = int.Parse(input![1]);

      var firstWeekDays = 8 - d;
      var remainedDays = n - firstWeekDays;
      var totalWeeks = 1 + (remainedDays + 6) / 7;

      printLine();

      var day = 1;
      for (int week = 1; week <= totalWeeks; week++) {
        Console.Write("|");
        for (int weekday = 1; weekday <= 7; weekday++) {
          if ((week == 1 && weekday < d) || day > n)
            Console.Write("...");
          else
            Console.Write(day < 10 ? $"..{day++}" : $".{day++}");
        }
        Console.WriteLine("|");
      }

      printLine();

    }
  }
}



[ 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
#include <bits/stdc++.h>

using namespace std;

void printLine() {
  cout << "+";
  for (int i = 0; i < 21; ++i)
    cout << "-";
  cout << "+\n";
}

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

  int n, d; cin >> n >> d;

  int firstWeekDays = 8 - d;
  int remainedDays = n - firstWeekDays;
  int totalWeeks = 1 + (remainedDays + 6) / 7;

  printLine();

  int day = 1;
  for (int week = 1; week <= totalWeeks; week++) {
    cout << "|";
    for (int weekday = 1; weekday <= 7; weekday++) {
      if ((week == 1 && weekday < d) || day > n)
        cout << "...";
      else cout << setw(3) << setfill('.') << day++;
    }
    cout << "|\n";
  }

  printLine();

  return 0;
}