학교 다닐 떄도 못했다. 그때는 문제 풀기만 급급해서 어떻게 풀어야 하는지 이해하지 못했다. 부트캠프에서 별찍기 문제를 푸는데 진짜 너무 못풀어서 약간의 자괴감을 느꼈다... 하지만 난 학교다닐 때도 못 풀었지... 맞아 그랬지...
별만 보면 약간 힘들어진다. 그런데 강사님이 어떻게 푸는지 방법을 알려주셔서 이제는 풀 수 있게 되었따. 조금만 생각하면 풀 수 있는데 그걸 못함 이제 할 수 있으니 됐다
[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]
이 부분의 규칙은
[4,2][4,3][4,4]
[5,1][5,2][5,3][5,4][5,5]
이 부분의 규칙은
이거 or 로 하면 둘 중에 하나의 조건을 만족할 때 별이 찍이면서 모래시계가 완성된다
너무 힘들었어요.. 그래도 별이 모양대로 나오면 기분이 좋기는 하더라...
별찍기는 마스터를 했기바란다.. 흑