2013년 5월 21일 화요일

Programming Challenges: LCD Display(PC/UVa ID: 110104/706)

Flow Diagram :


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

public class AnswExercise4 {

  static final String REG_WHITESPACE = "\\s+";
  //가로바의 존재 여부(첫번째 행, 중간 행, 마지막 행)
  static final char[][] hor = {{1,0,1},{0,0,0},{1,1,1},{1,1,1},{0,1,0},
      {1,1,1},{1,1,1},{1,0,0},{1,1,1},{1,1,1}};
  //세로바의 존재 여부(위 왼쪽, 위 오른쪽, 아래 왼쪽, 아래 오른쪽)
  static final char[][] ver = {{1,1,1,1},{0,1,0,1},{0,1,1,0},{0,1,0,1},{1,1,0,1},
      {1,0,0,1},{1,0,1,1},{0,1,0,1},{1,1,1,1},{1,1,0,1}};
  /**
   * @param args
   */
  public static void main(String[] args) {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    String line = "";
    String[] sLine;
    int s = 0;
    String numLine = "";
    try {

      while((line = br.readLine()) != null){
        line = line.trim().replaceAll(REG_WHITESPACE, " ");
        sLine = line.split(REG_WHITESPACE);
        
        s = setNumber(Integer.parseInt(sLine[0]));    //숫자를 표시하는 크기( 1<= s <= 10)
        numLine = setNumLine(sLine[1]);         //표현할 숫자(0<=numLine<=99999999)
        
        // 0 0 이 들어오면 끝낸다.
        if(s == 0 && numLine == "0"){
          return;
        }
        
        String[] hor_bar = {"          ".substring(0, s),"---------".substring(0, s)};
        String[] ver_bar = {" ","|"};
        
        char[] num = numLine.toCharArray();
        String[][] fld = new String[num.length][5];
        for(int i=0; i<num.length; i++){
          int no = num[i] - '0';
          //첫번 행의 가로바
          fld[i][0] = " " + hor_bar[hor[no][0]] + " ";
          //위쪽 세로바
          fld[i][1] = ver_bar[ver[no][0]] + hor_bar[0] + ver_bar[ver[no][1]];
          //중간 행의 가로바
          fld[i][2] = " " + hor_bar[hor[no][1]] + " ";
          //아래쪽 세로바
          fld[i][3] = ver_bar[ver[no][2]] + hor_bar[0] + ver_bar[ver[no][3]];
          //마지막 행의 가로바
          fld[i][4] = " " + hor_bar[hor[no][2]] + " ";
        }
        
        //출력(출력 부분은 수정해야함.)
        StringBuffer sb = new StringBuffer();
        sb.append(System.getProperty("line.separator"));
        for(int b=0; b<5; b++){
          
          if(b==1 || b==3){
            for(int i=0; i<s; i++){
              for(int a=0; a<num.length; a++){
                sb.append(fld[a][b]);
              }
              sb.append(System.getProperty("line.separator"));
            }
          }else{
            for(int a=0; a<num.length; a++){
              sb.append(fld[a][b]);
            }
            sb.append(System.getProperty("line.separator"));
          }
        }
        System.out.println(sb.toString());
            
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
    
  }
  
  private static int setNumber(int number){
    int l_number = Math.min(10, Math.max(number, 0));
    if(l_number != number){
      throw new IllegalArgumentException("s must be betwwen 1 and 10");
    }
    return l_number;
  }
  
  private static String setNumLine(String numLine){
    int l_numLine = Math.min(99999999, Math.max(Integer.parseInt(numLine), 0));
    if(l_numLine != Integer.parseInt(numLine)){
      throw new IllegalArgumentException("n must be betwwen 0 and 99999999");
    }
    return numLine;
  }

}

댓글 없음 :

댓글 쓰기