별 그리기

권재현·2021년 3월 19일
0

문제풀이

목록 보기
2/8
post-thumbnail

오늘은 18일 과제??또는 문제로 주신 자바를 배운다면 누구나 한번쯤은 무조건 거쳐간 별그리기다 !! 서두를 짧게하고 바로 본론으로 들어갑니다.
총 7개의 문제가 있고, for문 과 if문을 사용해서 풀었다.
조건: 변수 i , j는 무조건 0으로 시작한다.

1번

풀이 설명

  • for문
    i 세로줄이고, j 는 가로 줄이다.
    보면 별의 갯수와 j의 증가범위가 같다.
    그래서 1번 두번째 for문 조건식이 j<=i 이다.

  • if문
    if문 for문보다 생각해야 되는 조건인 공백이 존재해 처음부터 떠오르지는 않았다. 일단은 if문은 5*5 판에 별을 다그린다고 생각하고 공백을 넣은 경우의 수를 if문 조건에 넣으면된다.
    공백을 보면 j가 i보다 클때 공백이 발생한다.
    그래서 if 문 가로안에 조건은 j>i 이다

코드

forfor(int i = 0; i < 5; i++) {
		for(int j = 0; j <=i; j++) {
		System.out.print("*");
       	}
		System.out.println();
	}
	System.out.println("-----------------------");
   
iffor(int i = 0; i< 5; i++) {
		for(int j = 0; j < 5; j++) {
		if( i < j ) {
			System.out.print(" ");
            	}else {
			System.out.print("*");
			}
            	}
			System.out.println();		

2번

풀이설명

  • for문
    i 가 0일 때 j는 0 ~4까지 찍히고, 1일때 j는 3까지, 더보면
    i 값이 1씩 증가할 수록 별이 하나씩 줄고 있는 게 확인 가능하다.
    그래서 두번 째 for문 조건식을 j <= 4-i 라고 적어주면 된다.

  • if문
    2번 부터는 내가 풀 수는 있었으나 아직 내가 설명하면서 하기에는 아직 어렵다는 걸 느낀다. ㅠㅠ

forfor(int i = 0; i < 5; i++ ) {
		for(int j = 0; j <= 4-i; j++) {
			System.out.print("*");
		}
			System.out.println();
		}
iffor(int i = 0; i < 5 ; i++) {
		for(int j = 0; j <5 ; j++) {
			if( i > 4-j) {
				System.out.print("@");
			}else {
				System.out.print("*");
				}
			}
			System.out.println();
		}

3번

풀이설명

  • for문
    3번 부터는 삼각형 두개를 붙인다고 생각하고 시작하는 게 정신건강에 이롭다. 그래서 처음 삼각형은 공백 삼각형이고, 다음 삼각형은 별 삼각형이다. 우선 공백 삼각형은 i = 0 시에 j < 4까지고, i = 1 시에 j < 3까지다. i 가 1씩 증가면 공백이 하나씩 줄어든다는 것을 확인 할 수 있고 공백삼각형이 1,2번 유형의 다른 점은 5칸이 아니고 4칸이다. 그렇기에 조건을 만들어보면 j < 4-i이다.
    다음 별 삼각형은 공백 삼각형 옆에 바로들어 가기때문에 1번 삼각형의 풀이를 적용하면 쉽게 해결된다.
    여기까지는 풀고 다음 println의 위치를 놓는데 상당히 애를 먹었다.
    핵심 for문들이 다 한차례식 돌면 마지막에 놓아야한다.
forfor(int i = 0; i < 5; i++) {
			for(int j = 0; j <= 3-i; j++) {
				System.out.print(" ");
			}
			for(int k = 0; k <=i; k++) {
				System.out.print("*");
			}
			System.out.println();
		}
iffor(int i = 0; i < 5; i++) {
			for(int j = 0 ; j < 5; j++) {
				if( j < 4-i) {
					System.out.print("@");
				}else {
					System.out.print("*");
				}
			}
			System.out.println();
		}

4번

풀이설명

  • for문
    접근방식은 3번과 동일하다 똑같이 삼각형을 두개 붙이는 것이고 다만, 위치가 바뀐 것뿐이다. 공백삼각형은 j가 i보다 1씩 적어야 조건이 형성된다. 그래서 조건식이 j<= i-1 이고, 별 삼각형은 3번문제에서 적용해듯이 2번 문제 삼각형 식을 붙이면 해결할 수 있다.
 forfor(int i = 0; i < 5; i++) {
			for(int j = 0; j <= i-1; j++) {
				System.out.print(" ");
			}
			for(int k = 0; k <= 4-i; k++) {
				System.out.print("*");
			}
			System.out.println();
		}
 iffor(int i = 0; i < 5; i++) {
			for( int j = 0; j < 5; j++) {
				if(j <i) {
					System.out.print("@");
				}else {
					System.out.print("*");
					
				}
			}
			System.out.println();
		}

문제풀이 후기

일단 5,6,7번 까지 문제가 더 있었다. 물론, 열심히 노력한 결과 다행히 다 풀었고, if문으로도 다 풀이는 성공했고 내 생각에 5번 부터는 1,2,3,4번 문제만 활용만 하면 큰 어려움 없이 풀 수 있다. 그래서 따로 풀이는 안적었고 , 물론 if문은 경우의 수를 생각하는게 쉽지않았지만 마지막 7번만 제외하고는 할만한 수준이였다. 솔직히 저번주에 나 였다면 절대로 3번부터 아니 2번부터 막혔을 거다. 정말 신기하게 노력한 만큼 실력이 늘고 있다는 생각이 든다. 잘하는 사람이 보기에는 기초적인거라 실력이 늘었다고 말할 수 없을 지모른다. 근데 내 자신은 내가 제일 잘 알지 않나?? 확실히 사고력이 아주쪼금 늘은 것 같아 상당히 뿌듯하다. 내일 부터 토요일이다 .신나게 공부하러 가자
오늘도 수고 많았다.

profile
호텔리어 출신 비전공자

0개의 댓글