Problem Link : http://acm.uva.es/p/v7/706.html










■ Problem
– 주어진 크기로 주어진 숫자를 화면에 표기하라 쿠쿠

■ Solution
– 가로는 ‘-‘로 세로는 ‘|’로 주어진 크기만큼 열심히 그려주면됨.
– 숫자를 상하 5등분.. 가로-세로-가로-세로-가로 이렇게 나누고 각 숫자 패턴을 배열로 저장
– 대신 생각할 점은 입력된 숫자 하나를 다 출력하고 다음 숫자를 출력하는 것이 아니라
   입력된 숫자를 가로로 출력하는 것이라 아주 약간 생각이 필요함

■ Critical Input
– 역시 P.E가 많이 나옴… 이유는 숫자 하나 출력하고 다음 숫자 사이에 한 열이 비어야 하는데
   마지막 숫자 출력후에도 한열을 출력하게 해서 P.E가 많이 남.
– 왜 그러지하고 테스트차 안보이는 스페이스를 어떻게 나오나 보려고 ‘.’으로 대치해서 수정하고
   마지막 숫자뒤에 한열 출력되던 것 수정 하고 Submit 어랏 이젠 Wrong Answer 헐… 대략 난감…
   소스 열심히 Ctrl + z…. 그러던중.. 이상하다… 이상하다… ㅡ.ㅡ;;;
   소스 Submit할때 디버그하던 소스 그대로 넣어서.. 스페이스 부분이 다 ‘.’으로 넣어져서.. 웩..





[ Source Code ]

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//////////////////////////////////////////////////////////////////////////
// Define
#define MAX_ROW 14
#define MAX_COLUMN 23
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
// Function declaration
void printNumber ( char *, int );
void printRowColumn ( int, int );
int data[10][5] = { 4, 3, 5, 3, 4,
5, 2, 5, 2, 5,
4, 2, 4, 1, 4,
4, 2, 4, 2, 4,
5, 3, 4, 2, 5,
4, 1, 4, 2, 4,
4, 1, 4, 3, 4,
4, 2, 5, 2, 5,
4, 3, 4, 3, 4,
4, 3, 4, 2, 4};
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
// Main
int main ( void )
{
int size;
char input[9];

while ( 1 ) {
scanf ( %d, &size );
getchar ();
if ( size == 0 ) {
break;
}
scanf ( %s, input );
printNumber ( input, size );
printf ( \n );

}

return 0;
}
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
// Function printNumber
// Input : Input string, size integer
// Memo : print Number to screen
void printNumber ( char *input, int size )
{
int count, count1, count2, len, multi = 1, temp;
char ctemp;

len = strlen ( input );

// loop to end of input
for ( count = 0 ; count < 5 ; count++ ) {
if ( count == 1 || count == 3 ) {
multi = size;
}

for ( count1 = count2 = 0 ; count1 < len * multi ; count1++ ) {
// print by input number
if ( count1 != 0 ) count2 = count1 % len;
ctemp = input[count2];
temp = atoi ( &ctemp );
printRowColumn ( size, data[temp][count] );

// when one row printed, print ‘\n’
if ( len != 1 && count1 != 0 && count2 == len – 1 ) {
printf ( \n );
}
else {
if ( len != 1 ) {
printf ( ” “ );
}
else {
printf ( \n );
}
}

}
multi = 1;
}

}
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
// Function printRowColumn
// Input : print size, print type ( type 1 – ‘| ‘, type 2 – ‘ |’, type 3 – ‘| |’, type 4 – ‘—‘, type 5 ‘ ‘
// Memo : print Left ‘|’, ‘ ‘ what we want
void printRowColumn ( int size, int type )
{

int count, count1;

switch ( type ) {
case 1 :
printf ( “|” );
for ( count = 0 ; count < size + 1 ; count++ ) {
printf ( ” “ );
}
break;

case 2 :
for ( count = 0 ; count < size + 1 ; count++ ) {
printf ( ” “ );
}
printf ( “|” );
break;

case 3 :
printf ( “|” );
for ( count = 0 ; count < size ; count++ ) {
printf ( ” “ );
}
printf ( “|” );
break;
case 4 :
printf ( ” “ );
for ( count = 0 ; count < size ; count++ ) {
printf ( “-“ );
}
printf ( ” “ );
break;

case 5 :
for ( count = 0 ; count < size + 2 ; count++ ) {
printf ( ” “ );
}
break;
}

}
//////////////////////////////////////////////////////////////////////////

3 comments on “[ 706] LCD Display”

  1. 안녕하십니까.

    조언을 구하고자 합니다.

    제가 알고리즘트레이닝북(한빛)책을 보고있습니다.
    지뢰찾기까지는 스스로 구했는데 LCD 여기서 막힙니다.
    소스는 여기저기서 많이보고 이해도 했는데
    막상 ‘아 이젠 내가 짜보자’해서 짜보자그려면 눈앞이 컴컴해지고
    main()
    {
    여기서 손이 안움직입니다.

    ‘프로그래밍’은 어떻게 해야하는건지
    (한 1주에 한번씩 이문제를 잡았는데 이제 3달째가 지나 갑니다 ㅠ.ㅠ;;; ps. vi 코딩하다가 깜짝놀랐습니다 >> hjkl )

    1. 열심히 문제 푸시는 분들이 계시는군요…

      그리고 부끄러운 저의 블로그에 오셔서 부끄러운 소스들을

      보시는 분도 ^^;;

      알고리즘 열심히 하세요~~~ 다시 그때로 가고프다는 ^^

댓글 남기기