LCD+Display

= PC/UVa ID: 110104/706 - LCD 디스플레이(LCD Display) = 한 친구가 방금 새 컴퓨터를 샀다. 그 친구가 지금까지 샀던 가장 강력한 컴퓨터는 공학용 전자 계산기였다. 그런데 그 친구는 새 컴퓨터의 모니터보다 공학용 계산기에 있는 LCD 디스플레이가 더 좋다며 크게 실망하고 말았다. 그 친구를 만족시킬 수 있도록 숫자를 LCD 디스플레이 방식으로 출력하는 프로그램을 만들어 보자.

입력
입력 파일은 여러 줄로 구성되며 표시될 각각의 숫자마다 한 줄씩 입력된다. 각 줄에는 s와 n이라는 두 개의 정수가 들어있으며, n은 출력될 숫자(0 <= n <= 99,999,999), s는 숫자를 표시하는 크기(1 <= s <= 10)를 의미한다. 0이 두 개 입력된 줄이 있으면 입력이 종료되며 그 줄은 처리되지 않는다.

출력
입력 파일에서 지정한 숫자를 수평 방향은 '-' 기호를, 수직 방향은 '|'를 이용해서 LCD 디스플레이 형태로 출력한다. 각 숫자는 정확하게 s + 2 개의 열, 2s + 3개의 행으로 구성된다. 마지막 숫자를 포함한 모든 숫자를 이루는 공백을 스페이스로 채워야 한다. 두개의 숫자 사이에는 정확하게 한 열의 공백이 있어야 한다.

각 숫자 다음에는 빈 줄을 한 줄로 출력한다. 밑은 각 숫자를 출력하는 방식이 나와 있다.

입력 예
2 12345 3 67890 0 0

출력 예
 -- -- --  | | | | | |  | | | | | |  -- -- -- --  | | | | |  | | | | |  -- -- --  --- --- --- --- --- | | | | | | | | | | | | | | | | | | | | | | | |  --- --- --- | | | | | | | | | | | | | | | | | | | | | | | |  --- --- --- ---

출처
[]

Source Code code format="java5" import java.util.Scanner;

public class LCDisplay { public static boolean[][] digit = { {true, true, true, false, true, true, true},       // 0 {false, false, true, false, false, true, false},   // 1 {true, false, true, true, true, false, true},       // 2 {true, false, true, true, false, true, true},       // 3 {false, true, true, true, false, true, false},       // 4 {true, true, false, true, false, true, true},       // 5 {true, true, false, true, true, true, true},       // 6 {true, false, true, false, false, true, false},       // 7 {true, true, true, true, true, true, true},           // 8 {true, true, true, true, false, true, true}           // 9 };

public static void main(String[] args) { Scanner scan = new Scanner(System.in);

while(true) { int s = scan.nextInt;   // 숫자를 표시하는 크기 int n = scan.nextInt;   // 출력될 숫자

// 종료 조건 if(s == 0 && n == 0) { break; }

process(s, n); }   }

public static void process(int s, int n) { String o = Integer.toString(n);

drawH(s, o, 0);   // 위 가로선 drawV(s, o, 1); drawH(s, o, 3);   // 가운데 가로선 drawV(s, o, 4); drawH(s, o, 6);   // 아래 가로선 }

/**    * 가로선을 출력한다. * @param s 크기 * @param n 출력될 숫자 * @param a 참조할 위치 */   public static void drawH(int s, String n, int a) { for(int i = 0; i < n.length; i++) { int index = n.charAt(i) - '0';

if(digit[index][a]) { System.out.print(' '); drawChar(s, '-'); System.out.print(' '); } else { System.out.print(' '); drawChar(s, ' '); System.out.print(' '); }       }        System.out.println; }

/**    * 세로선을 출력한다. * @param s 크기 * @param n 출력될 숫자 * @param a 참조할 위치 */   public static void drawV(int s, String n, int a) { for(int i = 0; i < s; i++) { for(int j = 0; j < n.length; j++) { int index = n.charAt(j) - '0';

if(digit[index][a]) { System.out.print('|'); } else { System.out.print(' '); }

drawChar(s, ' ');

if(digit[index][a + 1]) { System.out.print('|'); } else { System.out.print(' '); }           }            System.out.println(' '); }   }

/**    * 문자를 반복 출력한다. * @param s 반복할 개수 * @param c 출력할 문자 */   public static void drawChar(int s, char c) { for(int j = 0; j < s; j++) { System.out.print(c); }   } } code

Comment 배열 문제이다. 2차원 배열을 콘솔에 어떻게 잘 출력할지 고민해보면 쉽게 풀 수 있다.