작성일 :

문제 링크

24578번 - Ultimate Binary Watch

설명

시각은 HHMM 형태의 4자리로 주어집니다. 네 자리 각각을 4비트로 표현해 세로 4칸짜리 LED 기둥으로 출력합니다.

출력 형식은 각 행마다 점과 별을 찍으며, 지정된 위치에 공백을 삽입합니다.


접근법

먼저, 문자열로 시각을 받아 각 자리 숫자를 배열에 저장합니다.

다음으로, 행을 위에서 아래로 내려가며 각 열의 비트를 확인합니다. 해당 비트가 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
using System;
using System.Text;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var time = Console.ReadLine()!;
      var d = new int[4];
      for (var i = 0; i < 4; i++)
        d[i] = time[i] - '0';

      var sb = new StringBuilder();
      for (var row = 3; row >= 0; row--) {
        sb.Clear();
        for (var col = 0; col < 4; col++) {
          var ch = ((d[col] >> row) & 1) == 1 ? '*' : '.';
          sb.Append(ch);
          if (col == 0 || col == 2) sb.Append(' ');
          if (col == 1) sb.Append("   ");
        }
        Console.WriteLine(sb.ToString());
      }
    }
  }
}

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
#include <bits/stdc++.h>
using namespace std;

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

  string time; cin >> time;
  int d[4];
  for (int i = 0; i < 4; i++)
    d[i] = time[i] - '0';

  for (int row = 3; row >= 0; row--) {
    string line;
    for (int col = 0; col < 4; col++) {
      char ch = ((d[col] >> row) & 1) ? '*' : '.';
      line.push_back(ch);
      if (col == 0 || col == 2) line.push_back(' ');
      if (col == 1) line.append("   ");
    }
    cout << line << "\n";
  }

  return 0;
}