JAVA/JAVA Basic

' * ' 로 도형 만들기

IT록흐 2020. 9. 10. 16:56
반응형

< 프로그래밍 완전 생초보의 코딩일기 >

 

 

 

 

http://justpost.tistory.com/47 

 

[문제 풀이] for문 활용 '*' 로 도형 8개 그리기 (JAVA)

[문제 풀이] for문 활용 '*' 로 도형그리기[ 8문제 ] for문을 활용하여 '*'로 도형을 그려봅니다. 사용언어 : JAVA 문제 예시 : num에 5 입력  pt1  *   **  ***  ****  *****  public void pt1(int num)..

justpost.tistory.com

 

 

이 분 블로그 예제를 활용하여 도형문제를 풀어 보았다.

 

 

 

예제 1

 

*
**
***
****
*****

 

 

for(int i = 0;i<5 ;i++) {
			for(int j=0;j<=i;j++) {
				System.out.print('*');
			}
			System.out.println();			
		}

 

 

예제 2

 

*****
****
***
**
*

 

for(int i = 4; i>=0;i--) {
			for(int j = 0; j<=i; j++) {
				System.out.print('*');
			}
			System.out.println();
		}

 

 

 

예제 3

 

    *
   **
  ***
 ****
*****

 

 

for(int i = 0; i<digit;i++) {
			for(int j = 0; j < digit; j++) {
				if(j >= (digit-i-1)) {
					System.out.print('*');
				}
				else {
					System.out.print(' ');
				}
			}
			System.out.println();
		}

 

 

예제 4

 

     *    
    ***   
   *****  
  ******* 
 *********

 

for(int i=0;i<digit;i++) {
			for(int j = 0; j <= ( 2*digit-1 ); j++) {
				if(j>=digit-i && j<=digit+i) {
					System.out.print('*');
				}
				else {
					System.out.print(' ');
				}
				
			}
			System.out.println();
		}

 

 

예제 5

 

*********
 *******
  *****
   ***
    *

 

 

for(int i = 0;i < digit;i++) {
			for(int j =0; j<i;j++) {
				System.out.print(' ');
			}
			for(int s =0; s< 2*(digit-i)-1; s++) {
				System.out.print('*');
			}
			System.out.println();
		}
		

 

 

if-else문을 쓰지 않고 풀어보았다. ' ' 을 for문으로 먼저 찍고, 이후  '*' 을 for으로 찍었다.

 

 

 

예제 6

 

*
**
***
****
*****
****
***
**
*

 

방법 1

Scanner scan = new Scanner(System.in);
		System.out.print("최고 높이를 입력해주세요 : ");
		int max = scan.nextInt();
		
		
		for(int i =0; i< max; i++) {
			for(int j=0; j<= i; j++) {
				System.out.print('*');
			}
			System.out.println();
		}
		
		for(int s =0; s< max-1;s++) {
			for(int z=0; z < max-1-s;z++) {
				System.out.print('*');
			}
			System.out.println();
		}
		

 

나는 이중 for문을 두 개를 사용하여 올라갈 때, 내려갈 때의 *을 찍었다.

 

 

방법2

int max = scan.nextInt();
		int maxline = 2*max-1;
		int count = 0;
		
		for(int i =0; i< maxline; i++) {
			
			if(i<max) {
				count++;
				for(int j =0; j<count; j++) {
					System.out.print('*');
				}
				
				System.out.println();
			}
			
			else {
				count--;
				for(int s =0; s<count; s++) {
					System.out.print('*');
				}
				System.out.println();
			}
		}
		

 

난 이 방법에 신선한 충격을 받았다. count 변수를 생성해서 * 이 찍히는 개수를 조절하는 것이다.  [ + -> -  ] , [ - > + ] 와 같이 흐름이 변화할 때, 따로 변수 하나를 생성해서 흐름을 추적하면 효율적이다.

 

 

예제 7

 

 

		for(int i =0; i<digit; i++) {
			if(i==0 || i == digit-1) {
				for(int j = 0; j < digit; j++) {
						System.out.print("*");
				}
				System.out.println();

			}else {
				for(int s =0;s<digit;s++) {
					if(s==0 || s == digit-1) {
						System.out.print("*");
					} else {
						System.out.print(" ");
					}
				}
				System.out.println();
			}
			
		}

 

 

|| 연산자를 이용하여, 원하는 i, j 값에만 * 이 찍히게 만들었다.

 

 

예제 8

 

 

 

방법1

for(int i =0; i<digit; i++) {
			if(i==0 || i == digit-1) {
				for(int j = 0; j < 2*digit; j++) {
					if(j%2==0)System.out.print('*');
					else System.out.print(' ');
				}
				System.out.println();

			}else {
				for(int s =0;s<2*digit;s++) {
					if(s==0 || s == 2*(digit-1)) System.out.print('*');
					else System.out.print(' ');
					
				}
				System.out.println();
			}
			
		}

 

예제7 도형에 가로줄 *사이에 공백이 추가된 도형이다. 그래서 나는 for문의 길이를 2배로 늘리고, j가 짝수일 때만 *을 찍고 홀수 일때는 공백을 찍었다. 하지만... 더 쉬운 방법이 있었다.

 

 

방법2

for(int i =0; i<digit; i++) {
			if(i==0 || i == digit-1) {
				for(int j = 0; j < digit; j++) {
						System.out.print("* ");
				}
				System.out.println();

			}else {
				for(int s =0;s<digit;s++) {
					if(s==0 || s == digit-1) {
						System.out.print("* ");
					} else {
						System.out.print("  ");
					}
				}
				System.out.println();
			}
			
		}

 

 

예제 7 코드에서 그대로 공백만 추가하면 되었다. "*"  =>  "* ". 

 

이렇게 하면 굳이 코드를 수정하지 않아도 원하는 도형을 얻어낼 수 있다.

 

 

 


 

배운 점

 

1. 조건문을 사용하여 통제하려 들지 않아도, 코드는 위에서 아래로 컴파일 된다는 특성을 활용하여 내가 원하는 출력을 얻어낼 수 있다. (예제 5)

 

 

2. 출력이 상태가 변하는 경우, 이를 추적하는 변수를 생성하는 것이 좋다.(예제6)

 

 

3. "* ", 도형 간격이 너무 붙어있으면 간단히 공백 하나 넣는 것으로 원하는 출력을 얻어 낼 수 있다. (예제 8)

 

반응형