YataNox
[Java] 2290 LCD Test 본문
문제
문제
지민이는 새로운 컴퓨터를 샀다.
하지만 새로운 컴퓨터에 사은품으로 온 LC-디스플레이 모니터가 잘 안나오는 것이다.
지민이의 친한 친구인 지환이는 지민이의 새로운 모니터를 위해 테스트 할 수 있는 프로그램을
만들기로 하였다.
입력
첫째 줄에 두 개의 정수 s와 n이 들어온다.
(1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다.
출력
길이가 s인 '-'와 '|'를 이용해서 출력해야 한다.
각 숫자는 모두 s+2의 가로와 2s+3의 세로로 이루어 진다.
나머지는 공백으로 채워야 한다.
각 숫자의 사이에는 공백이 한 칸 있어야 한다.
문제 풀이
아래 처럼 패널의 영역을 나누어서 숫자별로 영역들에 표시를 하도록 작성한다.
자바 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class N2290 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int s = Integer.parseInt(st.nextToken());
String number = st.nextToken();
char[][] panel = new char[2 * s + 3][(s + 2) * number.length() + number.length() - 1];
// 패널에 공백으로 초기화
// 나중에 숫자를 채워넣을 때 숫자 사이의 공백을 미리 채워넣기 위함
for (char[] chars : panel) {
Arrays.fill(chars, ' ');
}
// 입력받은 number를 한자씩 끊어서 패널에 프린트
for(int i = 0; i < number.length(); i++){
numberPrint(number.charAt(i) - '0', i, s, panel);
}
// 결과 출력
for (char[] chars : panel) {
for (char aChar : chars) {
System.out.print(aChar);
}
System.out.println();
}
}
// 숫자별로 몇 번째 세그먼트를 활성화 할지 지정한다.
public static void numberPrint(int num, int loc, int size,char[][] panel){
int x = loc * (size + 3);
int y = 0;
if(num == 1){
segmentPrint(x, y, size, panel, 1);
segmentPrint(x, y, size, panel, 2);
}
else if(num ==2){
segmentPrint(x, y, size, panel, 1);
segmentPrint(x, y, size, panel, 3);
segmentPrint(x, y, size, panel, 4);
segmentPrint(x, y, size, panel, 5);
segmentPrint(x, y, size, panel, 7);
}else if(num == 3){
segmentPrint(x, y, size, panel, 1);
segmentPrint(x, y, size, panel, 2);
segmentPrint(x, y, size, panel, 3);
segmentPrint(x, y, size, panel, 4);
segmentPrint(x, y, size, panel, 5);
}
else if(num == 4){
segmentPrint(x, y, size, panel, 1);
segmentPrint(x, y, size, panel, 2);
segmentPrint(x, y, size, panel, 4);
segmentPrint(x, y, size, panel, 6);
}
else if(num == 5){
segmentPrint(x, y, size, panel, 2);
segmentPrint(x, y, size, panel, 3);
segmentPrint(x, y, size, panel, 4);
segmentPrint(x, y, size, panel, 5);
segmentPrint(x, y, size, panel, 6);
}
else if(num == 6){
segmentPrint(x, y, size, panel, 2);
segmentPrint(x, y, size, panel, 3);
segmentPrint(x, y, size, panel, 4);
segmentPrint(x, y, size, panel, 5);
segmentPrint(x, y, size, panel, 6);
segmentPrint(x, y, size, panel, 7);
}
else if(num == 7){
segmentPrint(x, y, size, panel, 1);
segmentPrint(x, y, size, panel, 2);
segmentPrint(x, y, size, panel, 3);
}
else if(num ==8){
segmentPrint(x, y, size, panel, 1);
segmentPrint(x, y, size, panel, 2);
segmentPrint(x, y, size, panel, 3);
segmentPrint(x, y, size, panel, 4);
segmentPrint(x, y, size, panel, 5);
segmentPrint(x, y, size, panel, 6);
segmentPrint(x, y, size, panel, 7);
}
else if(num == 9){
segmentPrint(x, y, size, panel, 1);
segmentPrint(x, y, size, panel, 2);
segmentPrint(x, y, size, panel, 3);
segmentPrint(x, y, size, panel, 4);
segmentPrint(x, y, size, panel, 5);
segmentPrint(x, y, size, panel, 6);
}
else if(num == 0){
segmentPrint(x, y, size, panel, 1);
segmentPrint(x, y, size, panel, 2);
segmentPrint(x, y, size, panel, 3);
segmentPrint(x, y, size, panel, 5);
segmentPrint(x, y, size, panel, 6);
segmentPrint(x, y, size, panel, 7);
}
}
// 각 세그먼트별로 패널에 출력한다.
public static void segmentPrint(int x, int y, int size, char[][] panel, int segNum){
if(segNum == 1){
int pos = 1;
for(int i = 0; i < size; i++) {
panel[i + pos][x + size + 1] = '|';
}
}
else if(segNum == 2){
int pos = size + 2;
for(int i = 0; i < size; i++){
panel[i + pos][x + size + 1] = '|';
}
}
else if(segNum == 3){
for(int i = 0; i < size; i++){
panel[y][i + x + 1] = '-';
}
}
else if(segNum == 4){
int pos = size + 1;
for(int i = 0; i < size; i++){
panel[y + pos][i + x + 1] = '-';
}
}
else if(segNum == 5){
int pos = 2 * size + 2;
for(int i = 0; i < size; i++){
panel[y + pos][i + x + 1] = '-';
}
}
else if(segNum == 6){
for(int i = 0; i < size; i++){
panel[y + i + 1][x] = '|';
}
}
else if(segNum == 7){
int pos = size + 2;
for(int i =0 ; i < size; i++){
panel[y + i + pos][x] = '|';
}
}
}
}
'코딩 테스트 > BAEKJOON' 카테고리의 다른 글
[Java] 16927 배열 돌리기 2 (0) | 2024.05.09 |
---|---|
[Java] 16926 배열돌리기 1 (0) | 2024.05.09 |
[Java] 16931 겉넓이 구하기 (0) | 2024.05.08 |
[Java] 16967 배열 복원하기 (0) | 2024.05.07 |
[Java] 16920 확장게임 (0) | 2024.05.02 |