https://www.acmicpc.net/problem/2704
2704번: 이진법 시계
각 테스트 케이스마다, 3열 방식으로 읽은 이진법 시계의 시각과 3행 방식으로 읽은 이진법 시계의 시각을 공백으로 구분하여 출력한다. 각각 18개의 비트를 가져야 한다.
www.acmicpc.net
난이도 : 브론즈 2
태그 : 구현
1. 설명
시, 분, 초를 각각 이진법으로 나타내고 가로/세로 기준으로 출력하는 문제입니다.
C언어에 2진수 변환 내장 함수가 있을까 하며 찾아보다가,
그냥 포기하고 직접 구현해서 풀었습니다.
2. 소스코드
<cpp />
#include <stdio.h>
#include <stdlib.h>
void get_bin(int arr[], int n) {
int i = 0;
while (n > 0) {
arr[i] = n % 2;
n /= 2;
i++;
}
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int hour, minute, second;
scanf("%d:%d:%d", &hour, &minute, &second);
int bin_hour[6] = {0};
int bin_minute[6] = {0};
int bin_second[6] = {0};
get_bin(bin_hour, hour);
get_bin(bin_minute, minute);
get_bin(bin_second, second);
for (int i = 5; i >= 0; i--) printf("%d%d%d", bin_hour[i], bin_minute[i], bin_second[i]);
printf(" ");
for (int i = 5; i >= 0; i--) printf("%d", bin_hour[i]);
for (int i = 5; i >= 0; i--) printf("%d", bin_minute[i]);
for (int i = 5; i >= 0; i--) printf("%d", bin_second[i]);
printf("\n");
}
}
get_bin(int[] arr, int n) 은 숫자를 이진법으로 변환하는 함수입니다.
이진법을 배웠던 중학교 수학시간으로 돌아가 10진법을 2진법으로 바꾸는 과정을 떠올려 봅시다.
10을 이진법으로 나타내면
10/2 -> 5 .. 0
5 / 2 -> 2 .. 1
2 / 1 -> 1 .. 0
위 과정을 통해 10을 1010(2)로 나타낼 수 있으며,
위 과정을 코드로 표현한게 get_bin() 함수입니다.
이 과정을 통해 구한 이진법을 가로 / 세로 기준으로 출력하면 됩니다.
'코딩테스트 > C | C++' 카테고리의 다른 글
[백준 3447번] [C언어] 버그왕 (0) | 2022.11.29 |
---|---|
[백준 4158번] [C언어] CD (0) | 2022.11.28 |
[백준 8979번] [C] 올림픽 (0) | 2022.11.15 |
[백준 9339번] [C] 마라토너 (0) | 2022.11.15 |
[백준 25205번] [C] 경로당펑크 2077 (0) | 2022.10.14 |