- 아는 동생이 컴퓨터공학과 대학교 과제라고 하면서 보내온 큰 바람개비, 작은 바람개비 동시에 출력하기.
- 이게 정답 로직은 아니지만 이왕 만든김에 포스팅 합니다.
- 필자의 경우 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> </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> </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> </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> </td>";
}
}
}else if ($j == 11){ // 칸 띄운다.
$return .= "<td> </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> </td>";
}
}else if($i <=3 && $j > 14){ // 작은바람개비 오른쪽 상단 1,2,3 우측정렬 삼각형
$x = 18-$i;
if($j>= $x){
$return .= "<td bgcolor='green'>*</td>";
}else{
$return .= "<td> </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> </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> </td>";
}
}else{
$return .= "<td> </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> </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> </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> </td>";
}
}else{
//위에서 부터 5,4,3,2,1 우츨정렬 오른쪽 하단 삼각형
if($j >= $i){ // i의값보다 작거나 같을경우 별표 표시해주는 공식.
$return .= "<td bgcolor='aqua'>*</td>";
}else{
$return .= "<td> </td>";
}
}
}else if ($j == 11){ // 칸 띄운다.
$return .= "<td> </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> </td>";
}
}else if($i <=3 && $j > 14){ // 작은바람개비 오른쪽 상단 1,2,3 우측정렬 삼각형
$x = 18-$i;
if($j<= $x){
$return .= "<td bgcolor='aqua'>*</td>";
}else{
$return .= "<td> </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> </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> </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;
}
'Language > PHP' 카테고리의 다른 글
PHP 5 / 7 /8 version 차이점 알아보기 (2) | 2022.03.21 |
---|---|
[Composer] 외부 패키지를 마음대로 커스텀하기 (0) | 2022.03.04 |
[로직]다이아몬드 출력 로직 , 큰 다이아 작은 다이아 출력 하기 (2) | 2020.04.23 |
[로직]모래시계 출력 로직 , 큰 모래시계 작은 모래시계 출력 하기 (1) | 2020.04.23 |
[로직]이등변 삼각형 출력 로직 , 큰 이등변 삼각형 작은 이등변 삼각형 출력 하기 (1) | 2020.04.23 |