코딩 초보자들의 필수코스 이중for문을 활용하여 별찍기 문제 활용하기 입니다!

 

1번 문제 

 

**********

**********

**********

**********

**********

 

직사각형 별 찍기 

 

tip :  첫 줄은 행(세로)을 출력 / 두번째 줄은 렬(가로)을 출력 

package double_for;

public class TenFive {

	public static void main(String[] args) {
		for(int i = 1; i<=5; i++) {
			for (int j = 1; j<=10; j ++) {	
				System.out.print("*");
			}
			System.out.println();
		}
		
	}

}

 

 

 

2번 문제 

직삼각형 출력하기 

 

tip : 가로의 별이 한 줄씩 내려갈때마다 +1씩 증가 

 

풀이) 

package double_for;

public class RightAngledTriangle {

	public static void main(String[] args) {
		for(int i = 1; i<=10; i ++) {
			for(int j = 1; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}

}

j값 범위 풀이 : j가 1부터 i의 범위까지 1씩 증가 

즉, i가 1일때 j는 1부터 i범위 (1까지) 이므로 반복문이 도는 동안 계속 i값의 증가값(1부터 10까지)만 출력이 됨

 

 

 

3번 문제 

 

 역삼각형 별 찍기

 

tip :  한 줄 내려갈때마다 가로의 별이 하나씩 줄어든다

package double_for;

public class InvertedTriangle {

	public static void main(String[] args) {
		for( int i = 1; i <=5; i ++) {
			for (int j = 6-i; j >=1; j --) {
			System.out.print("*");
			}
			System.out.println();
		}
	}
}

j 범위 풀이 : 한 줄(i) 내려갈때마다 가로의 *이 하나씩 줄어들기 때문에 

i가 하나씩 생길수록 j는 하나씩 줄어든다고 보면 된다. 

i = 1,2,3,4,5까지 

j = 5,4,3,2,1까지 

 

i가 1일때 j는 5 

i가 2일때 j는 4 

즉 j의 범위는 제일 처음 찍힌 *의 개수인 5개보다 하나 더 많은 6개에서 -i를 해주면

i가 1일때는 j는 5개가 찍히고 

i가 마지막 5일때 j는 1개만 찍히게 된다. 

 

 

 

4번 문제 

 

오른쪽 정렬 삼각형 별 찍기

 

tip : 공백을 찍는 이중 for문 한 개와 *을 찍는 for문 한 개를 사용하여

공백을 찍는 for문은 역삼각형 문제처럼 *대신 공백이 있다고 생각하면서 풀어보자!

 

 

풀이1) 3개 변수 사용하기

package double_for;

public class RightAngledTriangle2_2 {

	public static void main(String[] args) {
		 for (int i = 1; i <= 5; i++) {
	            for (int j = 1; j <= 5-i; j++) {
	                System.out.print("a");
	           }
	            for (int k = 1; k <= i; k++) {
	                      System.out.print("*");
	                }
	            System.out.println();
	       }

	}

}

공백 대신 a를 대입해서 풀어보면 이해하기 쉬울 수 있어서 공백을 a로 치환해 계산해보겠습니다~

 

풀이 :  i는 a을 찍는 이중 for문으로 

i 범위는 1,2,3,4,5가 된다 

j의 범위는 4,3,2,1 

i=1일때 aaaa 이렇게 찍히게 된다. 

*를 찍는 k의 범위는 1부터 i까지 즉 i범위인 5까지 (1~5까지 1씩 증가) 

j와 k 모두 i의 for문 안에 속해있기 때문에 i가 1일때 a를 찍는 j는 4, *을 찍는 k는 1이 된다 

=> aaaa*

이 후 i 값 1을 증가시켜 i =2식을 아래 j와 k의 for문에 대입하여 루프를 돌면 된다.

 

 

풀이 2) 두 개의 변수만 사용하기

package double_for;

public class RightAngledTriangle2_ {

	public static void main(String[] args) {
		 for(int i=1; i<=5; i++) {
				for(int j=1; j<=(5-i); j++) {
					System.out.print("a");
				}
				for(int j=1; j<=i; j++) {
					System.out.print("*");
				}
				System.out.println();
			}
	}
}

풀이 :  i이 범위는 1,2,3,4,5 

j의 범위는 4,3,2,1

aaaa 출력이 되고 

어차피 j는 i라는 for문에 속해있기 때문에 i의 범위안에서 j라는 변수를 재활용하여 다른 값을 출력할 수 있다

*를 찍어내는 j의 범위는 1,2,3,4,5가 되므로 i가 1일때 j는 1

 

위에서 i가 1일때 a를 찍는 j의 값은 4였고 *를 찍는 j의 범위는 1이므로 

루프 한 번을 돌면 aaaa* 이렇게 찍히게 된다.

 

복사했습니다!