[로직]모래시계 출력 로직 , 큰 모래시계 작은 모래시계 출력 하기

 

  • 아는 동생이 컴퓨터공학과 대학교 과제라고 하면서 보내온 큰 모래시계, 작은 모래시계 동시에 출력하기.
  • 이게 정답 로직은 아니지만 이왕 만든김에 포스팅 합니다.
  • 필자의 경우 PHP 언어가 편해서 PHP로 작성하였음.
    • 필요한경우 변수선언,출력형태만 바꿔 사용하세요

 

1.왼쪽에 큰 모래시계, 오른쪽에 작은 모래시계를 출력하시오

 

  • 문제)
    • 왼쪽에 큰 모래시계 9*9 (9,7,5,3,1,3,5,7,9)
    • 한칸 띄고 (열 한칸 띄우고)
    • 오른쪽에 작은 모래시계  (5,3,1,3,5) 를 출력하시오

문제) 위의 모양을 출력하시오

 

2. 풀이

 

 

  • 1) 행 열의 갯수를 먼저 살펴봐야 한다.
    • 9*9, 한칸 열 띄우고, 5*5 의 경우
    • 총 행은 9행
    • 총 열은 15열 ( 큰모래시계 9열, 띄어쓰기1열, 작은모래시계 5열)
  • 2) 규칙을 찾아라
    • 반복문을 몇개를 써야하는지 코딩하기 전에 알고리즘을 생각해봐야 된다.
    • 필자의 경우 심심풀이로 해서 코드 간소화 까지 생각하지는 않았다.
    • 큰 모래시계의 경우 중간 5행은 가운대 중심 열만  '*' 표시 해야했고
    • 위에 1~5는 , 행의 값( x값 )  - 1 을 기준으로 열의 값이 그보다 크거나 , 총 열(9) - x보다 작거나 같을때,
    • 아래 6~9는, x =현 재행 - 5(6행 부터 시작함으로) 를 중심으로
      • 열의값이 5(중심열) - x 보다 크거나 같고, 5(중심열) + x 보다 작거나 같은 조건을 만족할 때
      • '*'을 출력했다.
    • 10열은 띄워야 해서 공란
    • 작은 모래시계의 경우 3행 보다 작을 경우 x = 현재 행 - 1을 기준으로
      • 11열부터 시작이기 때문에 y = 10 + 현재 행,
      • 열이 y값보다 크거나 같고, 15-x값보다 작거나 같은 경우 '*'을 표시
      • 그 이외에 공란.
    • 4행 이상, 6행 미만의 경우
      • x = 현재 행 - 3으로 초기값 설정 후
      • 현재 열이 13-x보다 크거나 같고, 13+x보다 작거나 같을 경우 '*'를 표시.
      • 그 이외에 공란
    • 이해가 안가시는 분은 자신만의 방정식을 찾아보세요!
  • 3) 필자는 웹개발자이기 때문에 출력을 가독성있게 하기위해 테이블 사용함.
    • 과제하는사람들은 알아서 고쳐 쓰세요 ^^;;
function get_Hourglass_table(){
    $return = "<table border='1'  id='tableleft'>";
    for ($i= 1 ; $i <= 9 ; $i++){
        $return .= "<tr>";
        for($j=1; $j <=15 ; $j++){
            if($j<=9){ //큰 모래시계
                if($i <= 5){
                    $x = $i-1;
                    if($j > $x && $j <= 9-$x){
                        $return .= "<td bgcolor='#8a2be2'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else{
                    $x = $i-5;
                    if($j >= 5-$x && $j <= 5+$x){
                        $return .= "<td bgcolor='#8a2be2'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }
            }else if($j==10){ //띄움
                $return .= "<td>&nbsp;</td>";
            }else{ //작은 모래시계
                if($i <=3 ){
                    $x = $i -1;
                    $y = 10+$i;
                    if($j >= $y && $j <= 15-$x){
                        $return .= "<td bgcolor='#8a2be2'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else if($i < 6){
                    $x = $i -3;
                    if($j >= 13-$x && $j <= 13+$x){
                        $return .= "<td bgcolor='#8a2be2'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else{

                }
            }
        }
        $return .= "</tr>";
    }
    $return .= "</table>";
    return $return;
}


$Hourglass = get_Hourglass_table();

echo $Hourglass;

출력 값