[Java]for문으로 별찍기 문제 푸는 법

jh5959·2025년 4월 23일
0

JAVA

목록 보기
1/2

학교다닐 때도 별찍기는 못했는데..

학교 다닐 떄도 못했다. 그때는 문제 풀기만 급급해서 어떻게 풀어야 하는지 이해하지 못했다. 부트캠프에서 별찍기 문제를 푸는데 진짜 너무 못풀어서 약간의 자괴감을 느꼈다... 하지만 난 학교다닐 때도 못 풀었지... 맞아 그랬지...

별만 보면 약간 힘들어진다. 그런데 강사님이 어떻게 푸는지 방법을 알려주셔서 이제는 풀 수 있게 되었따. 조금만 생각하면 풀 수 있는데 그걸 못함 이제 할 수 있으니 됐다


그래서 어떻게 풀면 되나면

[1,1] [1,2] [1,3] [1,4] [1,5] 
[2,1] [2,2] [2,3] [2,4] [2,5] 
[3,1] [3,2] [3,3] [3,4] [3,5] 
[4,1] [4,2] [4,3] [4,4] [4,5] 
[5,1] [5,2] [5,3] [5,4] [5,5] 

이걸 보면서 풀면된다

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

이런 별모양을 출력하기 위해서는

[1,1]
[2,1] [2,2] 
[3,1] [3,2] [3,3] 
[4,1] [4,2] [4,3] [4,4]  
[5,1] [5,2] [5,3] [5,4] [5,5] 

이렇게 출력하면 됨
이걸 코드로 표현하면 아래와 같이 된다

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

i가 1일 때 j를 1까지 찍고 i가 2일 때는 j를 2까지 찍으면 됨
이건 간단한 문제지만 별모양이 다양해지면 복잡해지니 먼저 저 표로 규칙을 찾고 수식을 만들면 잘 풀 수 있다

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

어려웠던 모래시계 모양 찍기는 if문을 넣으면 된다
먼저 저 표로 표현하면

[1,1][1,2][1,3][1,4][1,5]
     [2,2][2,3][2,4]     
          [3,3]          
     [4,2][4,3][4,4]     
[5,1][5,2][5,3][5,4][5,5]

이렇게 되는데 이걸 만들기 위해서는 교집합을 이용하면 됨

[1,1] [1,2] [1,3] [1,4] [1,5] 
[2,1] [2,2] [2,3] [2,4] 
[3,1] [3,2] [3,3] 
[4,1] [4,2] 
[5,1]  

이거랑

[1,1]  
[2,1] [2,2]  
[3,1] [3,2] [3,3] 
[4,1] [4,2] [4,3] [4,4] 
[5,1] [5,2] [5,3] [5,4] [5,5] 

이걸 합치면

[1,1] [1,2] [1,3] [1,4] [1,5] 
[2,1] [2,2] [2,3] [2,4] 
[3,1] [3,2] [3,3] 
[4,1] [4,2] [4,3] [4,4] 
[5,1] [5,2] [5,3] [5,4] [5,5] 

이렇게 됨
그리고 아래 모양을 빼면


[2,1] 
[3,1] [3,2] 
[4,1]  

원하는 모양이 나온다

[1,1][1,2][1,3][1,4][1,5]
     [2,2][2,3][2,4]     
          [3,3]          
     [4,2][4,3][4,4]     
[5,1][5,2][5,3][5,4][5,5]

이걸 코드로 표현해보자

for(int i=1; i<=5; i++) {
            for (int j=1; j<=5; j++){
                if((i+j<=6 && i<=j )||(i>=j && i+j>=6)) { //
                    //System.out.print("*");
                    System.out.printf("[%d,%d]",i,j);
                }else {
                   // System.out.printf("%c",' ');
                    System.out.printf("%5c",' ');
                }
            }
            System.out.println();
           

코드가 복잡하지만 하나씩 보면 이해가 된다
중첩 for문을 사용했으면 i와 j는 모두 1부터 5까지가 범위가

[1,1][1,2][1,3][1,4][1,5]
     [2,2][2,3][2,4]     
          [3,3]          

이 부분의 규칙은

  • 둘의 합이 6이거나 6보다 작다 (ex. [1,1] = 1+1=2)
  • 그리고 i가 j거나 j보다 작다(ex. [2,3], i=2 j=3, 2<3)
	[4,2][4,3][4,4]     
[5,1][5,2][5,3][5,4][5,5]

이 부분의 규칙은

  • 둘의 합이 6이거나 6보다 크다 (ex. [4,2] = 4+2=6)
  • 그리고 i가 j거나 j보다 크다(ex. [5,3], i=5 j=3, 5>3)

이거 or 로 하면 둘 중에 하나의 조건을 만족할 때 별이 찍이면서 모래시계가 완성된다


별찍다가 별 볼 뻔...

너무 힘들었어요.. 그래도 별이 모양대로 나오면 기분이 좋기는 하더라...
별찍기는 마스터를 했기바란다.. 흑

0개의 댓글