Uknow's Lab.
article thumbnail

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
profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.