Uknow's Lab.
article thumbnail

https://www.acmicpc.net/problem/2704

 

2704번: 이진법 시계

각 테스트 케이스마다, 3열 방식으로 읽은 이진법 시계의 시각과 3행 방식으로 읽은 이진법 시계의 시각을 공백으로 구분하여 출력한다. 각각 18개의 비트를 가져야 한다.

www.acmicpc.net

 

난이도 : 브론즈 2
태그 : 구현

 

 

설명

시, 분, 초를 각각 이진법으로 나타내고 가로/세로 기준으로 출력하는 문제입니다.

C언어에 2진수 변환 내장 함수가 있을까 하며 찾아보다가,

그냥 포기하고 직접 구현해서 풀었습니다.

 

 

 

소스코드

#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다. 아무말이나 해봤습니다.