※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2704번 문제인 이진법 시계이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2704
2704번: 이진법 시계
각 테스트 케이스마다, 3열 방식으로 읽은 이진법 시계의 시각과 3행 방식으로 읽은 이진법 시계의 시각을 공백으로 구분하여 출력한다. 각각 18개의 비트를 가져야 한다.
www.acmicpc.net
문자열로 주어지는 시각을 문제에서 주어진 이진법 시계의 형식에 맞게 출력하는 문제이다. 먼저 주어진 시각을 문자열로 읽고, 이 문자열에서 주어진 시각의 시, 분 초의 값을 정수로 뽑아내는 파싱을 진행하자. substr과 stoi를 이용하면 이 작업을 간단히 해낼 수 있다.
정수 X의 이진표현 중 \(2^k)\)를 나타내는 비트는 (1<<k)와 비트 and(&)연산을 이용해 접근할 수 있다. 이와 같은 접근을 이용하면 각 시,분,초를 나타내는 정수의 각 비트가 켜져있는지를 확인해 문제의 답을 출력할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int T;
string s;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while (T--) {
cin >> s;
int H = stoi(s.substr(0, 2)), M = stoi(s.substr(3, 2)), S = stoi(s.substr(6, 2));
for (int k = 5; k > -1; k--) {
if (H & (1 << k)) cout << 1;
else cout << 0;
if (M & (1 << k)) cout << 1;
else cout << 0;
if (S & (1 << k)) cout << 1;
else cout << 0;
}
cout << ' ';
for (int k = 5; k > -1; k--) {
if (H & (1 << k)) cout << 1;
else cout << 0;
}
for (int k = 5; k > -1; k--) {
if (M & (1 << k)) cout << 1;
else cout << 0;
}
for (int k = 5; k > -1; k--) {
if (S & (1 << k)) cout << 1;
else cout << 0;
}
cout << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 17478 // C++] 재귀함수가 뭔가요? (0) | 2023.02.21 |
---|---|
[BOJ 9536 // C++] 여우는 어떻게 울지? (0) | 2023.02.21 |
[BOJ 25275 // C++] Bar Classification (1) | 2023.02.20 |
[BOJ 9784 // C++] Boiled Eggs (0) | 2023.02.20 |
[BOJ 11605 // C++] Magic Trick (0) | 2023.02.20 |