백준 이진법 시계

KIMYEONGJUN·2024년 11월 12일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 줄에 테스트 케이스의 수 N이 주어진다. (1<=N<=1000)
각 케이스마다 10진법에서의 시간, 분, 초로 나타낸 시각이 한 줄에 예제의 형식과 같이 주어진다.

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

내가 이 문제를 보고 생각해본 부분

BufferedReader를 사용하여 입력을 받는다.
첫 줄에서 테스트 케이스 수 N을 읽어온다.
각 테스트 케이스에 대해 시간을 시:분:초 형식으로 입력받고,
이를 각각 정수로 변환한다.
to6BitString 메소드를 호출하여 시, 분, 초를 각각 6비트 이진수 문자열로 변환한다.
이진수는 최대 6비트로 표현 가능하므로 이 방식이 사용된다.
3열 방식은 각 비트를 열 우선으로 읽어 결합한다.
즉, 시간, 분, 초의 각 비트를 순서대로 추가하여 하나의 문자열을 만든다.
3행 방식은 각 비트를 행 우선으로 읽어 결합해준다.
즉, 시간, 분, 초의 각 비트를 순서대로 추가하여 하나의 문자열을 만든다.
각 테스트 케이스에 대한 결과를 StringBuilder에 저장한다.
최종적으로 모든 결과를 출력한다.
이 메소드는 주어진 정수를 이진수 문자열로 변환하고,
6자리로 맞추기 위해 왼쪽에 0을 추가한다.
Integer.toBinaryString(value)는 정수를 이진수 문자열로 변환하고,
String.format을 사용해 6자리로 패딩한다.
각 테스트 케이스의 시간을 이진수로 변환하여 두 가지 방식(3열 및 3행)으로 출력한다.

코드로 구현

package baekjoon.baekjoon_24;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 2704번 문제
public class Main835 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine().trim()); // 테스트 케이스 수

        StringBuilder result = new StringBuilder();

        for(int i = 0; i < N; i++) {
            String[] clock = br.readLine().split(":");
            int hour = Integer.parseInt(clock[0]);
            int minute = Integer.parseInt(clock[1]);
            int second = Integer.parseInt(clock[2]);

            // 각 시간, 분, 초를 6비트 문자열로 변환
            String[] binaryClock = {
                    to6BitString(hour),
                    to6BitString(minute),
                    to6BitString(second)
            };

            // 3열 방식
            StringBuilder r6h3 = new StringBuilder();
            for(int j = 0; j < 6; j++) {
                for(int b = 0; b < 3; b++) {
                    r6h3.append(binaryClock[b].charAt(j));
                }
            }

            // 3행 방식
            StringBuilder r3h6 = new StringBuilder();
            for(int b = 0; b < 3; b++) {
                for(int j = 0; j < 6; j++) {
                    r3h6.append(binaryClock[b].charAt(j));
                }
            }

            // 결과 추가
            result.append(r6h3).append(" ").append(r3h6).append("\n");
        }

        // 최종 결과 출력
        System.out.print(result.toString());
        br.close();
    }

    // 정수를 6비트 문자열로 변환하는 메소드
    private static String to6BitString(int value) {
        return String.format("%6s", Integer.toBinaryString(value)).replace(' ', '0');
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글