코딩 초보자들의 필수코스 이중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* 이렇게 찍히게 된다.
'자바 > 예제' 카테고리의 다른 글
[JAVA] 자바예제 이중 for문으로 별 찍기 [2] 피라미드(트리) (0) | 2022.05.17 |
---|---|
[JAVA] 자바로 2단에서 9단까지 구구단 출력하기 (0) | 2022.05.16 |