[백준 2704] 이진법 시계 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
주어진 시각을 6비트 이진수로 표현한 뒤, 3열 방식과 3행 방식으로 읽은 18비트 값을 출력하는 문제입니다.
접근법
먼저, 시, 분, 초를 각각 6비트 이진수로 변환합니다.
이후, 3열 방식은 같은 비트 위치를 시, 분, 초 순으로 이어 붙이고, 3행 방식은 시 6비트, 분 6비트, 초 6비트를 순서대로 이어 붙여 결과를 출력합니다.
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
using System;
using System.Text;
class Program {
static string ToBits(int x) {
var arr = new char[6];
for (var i = 0; i < 6; i++) {
var bit = (x >> (5 - i)) & 1;
arr[i] = bit == 1 ? '1' : '0';
}
return new string(arr);
}
static void Main() {
var t = int.Parse(Console.ReadLine()!);
for (var i = 0; i < t; i++) {
var parts = Console.ReadLine()!.Split(':');
var h = int.Parse(parts[0]);
var m = int.Parse(parts[1]);
var s = int.Parse(parts[2]);
var bh = ToBits(h);
var bm = ToBits(m);
var bs = ToBits(s);
var col = new StringBuilder(18);
for (var k = 0; k < 6; k++) {
col.Append(bh[k]);
col.Append(bm[k]);
col.Append(bs[k]);
}
var row = bh + bm + bs;
Console.WriteLine($"{col} {row}");
}
}
}
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
40
41
#include <bits/stdc++.h>
using namespace std;
string toBits(int x) {
string s(6, '0');
for (int i = 0; i < 6; i++) {
int bit = (x >> (5 - i)) & 1;
s[i] = bit ? '1' : '0';
}
return s;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
for (int i = 0; i < t; i++) {
string line; cin >> line;
int h = stoi(line.substr(0, 2));
int m = stoi(line.substr(3, 2));
int s = stoi(line.substr(6, 2));
string bh = toBits(h);
string bm = toBits(m);
string bs = toBits(s);
string col;
col.reserve(18);
for (int k = 0; k < 6; k++) {
col.push_back(bh[k]);
col.push_back(bm[k]);
col.push_back(bs[k]);
}
string row = bh + bm + bs;
cout << col << " " << row << "\n";
}
return 0;
}