[로직]바람개비 출력 로직 , 큰 바람개비 작은 바람개비 출력 하기

 

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

 

1.왼쪽에 큰 바람개비, 오른쪽에 작은 바람개비를 출력하시오

 

  • 문제) #11과 # 12를 출력하시오 
    • 왼쪽에 큰 바람개비 10*10
    • 한칸 띄고 (열 한칸 띄우고)
    • 오른쪽에 작은 다이아  6*6 을 출력하시오

 

 

2.풀이

 

 

  • 1) 행 열의 갯수를 먼저 살펴봐야 한다.
    • 10*10, 한칸 열 띄우고, 6*6 의 경우
    • 총 행은 10행
    • 총 열은 17열 ( 큰다이아 10열, 띄어쓰기1열, 작은다이아 6열)
  • 2) 규칙을 찾아라
    • 반복문을 몇개를 써야하는지 코딩하기 전에 알고리즘을 생각해봐야 된다.
    • 필자의 경우 심심풀이로 해서 코드 간소화 까지 생각하지는 않았다.
    • 큰 바람개비의 행과 열을 다시 조건문으로 4등분 했다.
      • 1,5 ~ 5,5 까지 왼쪽 상단 삼각형
      • 1,6~ 5,10 까지 오른쪽 상단 삼각형
      • 6,1 ~ 10.5 까지 왼쪽 하단 삼각형
      • 6,6 ~ 10,10 까지 오른쪽 하단 삼각형
    • 띄어쓰기 11열
    • 작은 바람개비의 행과 열을 다시 조건문으로 4등분 했다.
      • 1,12 ~ 3,14 까지 왼쪽 상단 삼각형
      • 1,15 ~ 3,17 까지 우측 상단 삼각형
      • 4,12 ~ 6,14 까지 왼쪽 하단 삼각형
      • 4,15 ~ 6,17 까지 우측 하단 삼각형
  • 3) 필자는 웹개발자이기 때문에 출력을 가독성있게 하기위해 테이블 사용함.
    • 과제하는사람들은 알아서 고쳐 쓰세요 ^^;;

 

function get_vane_table(){
    $return = "<table border='1'>";
    for($i=1; $i<=10; $i++){ // 큰바람개비 10행, 작은바람개비 6행 포함 도합 1~10
        $return .= "<tr>";
        for($j=1 ; $j <= 17; $j++){ // 큰바람개비 1~10, 띄우는칸 11 ,작은다이아 12~17 도합 1~17
            if($j <= 10){ //왼쪽 큰 바람개비. 10행 10열, 10열이기 때문에 $j가 10보다 작거나 같을 떄.
                if($i<=5 && $j<=5){
                    //위에서 부터 5,4,3,2,1 우측정렬 왼쪽 상단 삼각형
                    $x = $i-1; // 각 행에서 1개를 뺀 값이 공백이 된다. 내가생각한공식;
                    if($j <= $x){ // 행-1의 값보다 열의 값이 클때 * 표시
                        $return .= "<td>&nbsp;</td>";
                    }else{
                        $return .= "<td bgcolor='green'>*</td>";
                    }

                }else if($i<=5 && ($j > 5 && $j<=10)){ // 위에서부터 1,2,3,4,5  우측정렬 우측 상단 삼각형
                    if($j > 10-$i){ // 10 - 행의 값 뺀만큼의 값보다 열의값이 클경우만 *을 표시해야함.
                        $return .= "<td bgcolor='green'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else if($i > 5 && $j <= 5){
                    //아래에서 부터 5,4,3,2,1 좌측정렬 왼쪽 하단 삼각형
                    $x = $i-6;
                    if( $x != 0){ //첫열은 전부 * 채우기 위해 분기.
                        if($j <= 5-$x){ // 5에서 $x의 값을 뺸 값까지 *을 표시해야 되는 공식.
                            $return .= "<td bgcolor='green'>*</td>";
                        }else{
                            $return .= "<td>&nbsp;</td>";
                        }
                    }else{
                        $return .= "<td bgcolor='green'>*</td>";
                    }
                }else{
                    //위에서 부터 1,2,3,4,5 좌측정렬 오른쪽 하단 삼각형
                    if($j <= $i){ // i의값보다 작거나 같을경우 별표 표시해주는 공식.
                        $return .= "<td bgcolor='green'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }
            }else if ($j == 11){ // 칸 띄운다.
                $return .= "<td>&nbsp;</td>";
            }else{ //오른쪽 작은 바람개비. 6행 6열
                if($i <= 3 && $j <=14){ // 작은바람개비 왼쪽 상단 3,2,1 우측정렬 삼각형
                    $x = $i+11;
                    if($j >= $x){
                        $return .= "<td bgcolor='green'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else if($i <=3 && $j > 14){ // 작은바람개비 오른쪽 상단 1,2,3 우측정렬 삼각형
                    $x = 18-$i;
                    if($j>= $x){
                        $return .= "<td bgcolor='green'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else if($i > 3 && $j <= 14){ // 작은바람개비 우측 하단 3,2,1 좌측정렬 삼각형
                    $x = $i-3;
                    if($j <= 15-$x){
                        $return .= "<td bgcolor='green'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else if($i <7 && $j > 14){// 작은바람개비 우측 하단 1,2,3 좌측정렬 삼각형
                    $x = $i -3;
                    if($j <= 14+$x){
                        $return .= "<td bgcolor='green'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else{
                    $return .= "<td>&nbsp;</td>";
                }

            }
        }
        $return.= "</tr>"; // 행을 표시하기 위해 한줄 띄워준다.
    }
    $return .= "</table>";
    return $return;
}

function get_vane2_table(){
    $return = "<table border='1'>";
    for($i=1; $i<=10; $i++){ // 큰바람개비 10행, 작은바람개비 6행 포함 도합 1~10
        $return .= "<tr>";
        for($j=1 ; $j <= 17; $j++){ // 큰바람개비 1~10, 띄우는칸 11 ,작은다이아 12~17 도합 1~17
            if($j <= 10){ //왼쪽 큰 바람개비. 10행 10열, 10열이기 때문에 $j가 10보다 작거나 같을 떄.
                if($i<=5 && $j<=5){
                    //위에서 부터 1,2,3,3,4 좌측정렬 왼쪽 상단 삼각형
                    if($j <= $i){ // 행-1의 값보다 열의 값이 클때 * 표시
                        $return .= "<td bgcolor='aqua'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }

                }else if($i<=5 && ($j > 5 && $j<=10)){ // 위에서부터 5,4,3,2,1  우측정렬 우측 상단 삼각형
                    $x = $i-1;
                    if($j <= 10-$x){ // 10 - 행의 값 뺀만큼의 값보다 열의값이 클경우만 *을 표시해야함.
                        $return .= "<td bgcolor='aqua'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else if($i > 5 && $j <= 5){
                    //아래에서 부터 1,2,3,3,4 우측 정렬 왼쪽 하단 삼각형
                    $x = $i-5;
                    if($j>5-$x){
                        $return .= "<td bgcolor='aqua'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else{
                    //위에서 부터 5,4,3,2,1 우츨정렬 오른쪽 하단 삼각형
                    if($j >= $i){ // i의값보다 작거나 같을경우 별표 표시해주는 공식.
                        $return .= "<td bgcolor='aqua'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }
            }else if ($j == 11){ // 칸 띄운다.
                $return .= "<td>&nbsp;</td>";
            }else{ //오른쪽 작은 바람개비. 6행 6열
                if($i <= 3 && $j <=14){ // 작은바람개비 왼쪽 상단 1,2,3 좌측정렬 삼각형
                    $x = $i+11;
                    if($j <= $x){
                        $return .= "<td bgcolor='aqua'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else if($i <=3 && $j > 14){ // 작은바람개비 오른쪽 상단 1,2,3 우측정렬 삼각형
                    $x = 18-$i;
                    if($j<= $x){
                        $return .= "<td bgcolor='aqua'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else if($i < 7 && $j <= 14){ // 작은바람개비 우측 하단 3,2,1 좌측정렬 삼각형
                    $x = $i-3;
                    if($j >= 15-$x){
                        $return .= "<td bgcolor='aqua'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else if($i <7 && $j > 14){// 작은바람개비 우측 하단 1,2,3 좌측정렬 삼각형
                    $x = $i -3;
                    if($j >= 14+$x){
                        $return .= "<td bgcolor='aqua'>*</td>";
                    }else{
                        $return .= "<td>&nbsp;</td>";
                    }
                }else{
                }

            }
        }
        $return.= "<tr>"; // 행을 표시하기 위해 한줄 띄워준다.
    }
    $return .= "</table>";
    return $return;
}

$vane = get_vane_table();
$vane2 = get_vane_table2();

$arr = array($vane,$vane2);

foreach ($arr as $key){
    echo $key;
}

출력결과