별찍기 문제 중 이런 문제는 처음본 것 같다.
이 문제처럼 반복되는 모양의 구조를 프랙탈 구조라고 한다.
반복되는 구조를 잘 파악하는 것이 핵심이다.
똑같은 모양을 가지고 구조를 만들기 때문에 첫 모양은 규칙을 찾으려 하지 말고 임의로 생성해준다.
arr[0] = " * ";
arr[1] = " * * ";
arr[2] = "*****";
N = 6인경우 1, 2, 3 은 기본 모양을 나타내고,
4, 5, 6은 1, 2, 3줄을 이용해 2개의 기본 삼각형을 그린다.
구조를 잘 보면 두 모양 사이에는 공백이 존재하는 것을 볼 수 있다.
따라서,
arr[3] = arr[0] + " " + arr[0];
arr[4] = arr[1] + " " + arr[1];
arr[5] = arr[2] + " " + arr[2];
이와 같은 형태를 띄게 된다.
위 과정을 끝내고 나면
*
* *
*****
* *
* * * *
***** ***** 이러한 형태가 된다.
이제 좌우에 공백을 맞춰 문제에서 요구하는 형태로 나타내야 한다.
이 때, 좌우 공백칸수를 잘 보면 N/2임을 찾을 수 있다.
그렇기 때문에
arr[0] = " " + arr[0] + " ";
arr[1] = " " + arr[1] + " ";
arr[2] = " " + arr[2] + " ";
공백은 3의 배수개로 늘어나기 때문에 나는 3칸을 넣어주었다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 2577번 숫자의 개수 (0) | 2018.06.21 |
---|---|
백준 1152번 단어의 개수 (0) | 2018.06.19 |
백준 1065번 한수 (0) | 2018.06.15 |
백준 4673번 셀프넘버 (0) | 2018.06.15 |
백준 4344번 평균은 넘겠지 java (0) | 2018.06.09 |
댓글