
내가 생각했을때 문제에서 원하는부분
첫 줄에 테스트 케이스의 수 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');
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.