코드 그라데이션

JAVA 별찍기 (3) 직각삼각형 모양 (2) 본문

Java/간단한 Quiz

JAVA 별찍기 (3) 직각삼각형 모양 (2)

완벽한 장면 2023. 3. 23. 00:14

출력해야 하는 모양

 

브레인스토밍

- 공백도 문자일 수 있다는 idea!

- 공백은 (" ") 이 모양으로 찍어주면 된다.

- 공백 4개 찍고 별 / 공백 3개 찍고 별별 / ... 이렇게 지금 반복 되고 있어.

- 그러면, 공백을 찍는 for문과 / 별을 찍는 for문을 각각 만들어서 출력해주면 된다.

** 지금 변하는 값은? 공백의 수와 별의 수.

 

1. 첫번째 줄 : 공백 4개 / 별 1개

for(int i = 0; i<4; i++) {
  System.out.print(" "); // 공백 네 개
}
for(int j = 0; j<1; j++) {
  System.out.print("*"); // 별 한 개
}
System.out.println();

 

2. 두 번째 줄 : 공백 3개 / 별 2개

for(int i = 0; i<3; i++) {
  System.out.print(" "); // 공백 세 개
}
for(int j = 0; j<2; j++) {
  System.out.print("*"); // 별 두 개
}
System.out.println();

 

3. 세 번째 줄 : 공백 2개 / 별 3개

for(int i = 0; i<2; i++) {
  System.out.print(" "); // 공백 두 개
}
for(int j = 0; j<3; j++) {
  System.out.print("*"); // 별 세 개
}
System.out.println();

 

4. 네 번째 줄 : 공백 1개 / 별 4개

for(int i = 0; i<1; i++) {
  System.out.print(" "); // 공백 한 개
}
for(int j = 0; j<4; j++) {
  System.out.print("*"); // 별 네 개
}
System.out.println();

 

5. 다섯번째 줄 : 공백 0 / 별 5개

for(int i = 0; i<0; i++) {
  System.out.print(" "); // 공백 제로
}
for(int j = 0; j<5; j++) {
  System.out.print("*"); // 별 다섯 개
}
System.out.println();

 

그러면...

규칙성을 찾기 위해 일단 변하는 값을 각각 x와 y로 치환해서 식을 만들어본다.

for (int k = 0; k<5; k++) {
  // 변하는 값을 일단 x와 y로 치환해서 기다리고 있다.
  for(int i = 0; i<x; i++) {
    System.out.print(" "); 
  }
  for(int j = 0; j<y; j++) {
    System.out.print("*"); 
  }
}

 

 

고민 시작.

x를 k에 관한 식으로 변환이 가능한가? : 규칙성 찾기

( x = k...)

k  0  1  2  3  4
x  4  3  2  1  0

4 = 4-0 / 3 = 4-1 / 2 = 4- 2 / 1 = 4-3 / 0 = 4-4 형태로 만들 수 있다.

 

도출한 식은

x = 4 - k (현재 5행을 출력하므로)

 

다음으로

y를 k에 관한 식으로 변환이 가능한가? : 규칙성 찾기

( y = k...)

     k 0 1 2 3 4
     y 1 2 3 4 5

    // 1 = 0+1 / 2 = 1+1 / 3 = 2+1 / 4 = 3+1 / 5 = 4+1

 

도출한 식은

 y = k + 1

 

따라서

치환까지 완료한 중첩 for문은...!

    for (int k = 0; k<5; k++) {
      // 변하는 값을 일단 x와 y로 치환해서 기다리고 있다.
      for(int i = 0; i<N-1-k; i++) { // N을 그냥 5로 적으면, i<4-k 라고 표현 가능
        System.out.print(" "); // 공백 개수
      }
      for(int j = 0; j<k+1; j++) {
        System.out.print("*"); // 별 개수
      }
      System.out.println(); // 줄바꿈이 필요하다.
    }

 

전체 코드

// 3. 역직삼각형
public class Star03P {
  public static void main(String[] args) {
    int N = 5; // 가독성을 위해 변수로 대체

    for (int k = 0; k<5; k++) {
      for(int i = 0; i<N-1-k; i++) { // N을 그냥 5로 적으면, i<4-k 라고 표현 가능
        System.out.print(" "); // 공백 개수
      }
      for(int j = 0; j<k+1; j++) {
        System.out.print("*"); // 별 개수
      }
      System.out.println(); 
      }
  }
}

 

728x90
Comments