문제 링크 : https://www.acmicpc.net/problem/2448


해결방법 : 


삼각형 형태를 보면은 똑같은 부분이 3개위치에서 반복해서 그려지는 것을 볼 수 있었다.

맨위의 꼭짓점기준 1개 (하나의 삼각형 모습을 보이고 있다.)

맨위에서 왼쪽 아래에 있는 꼭지점 상단 1개 (하나의 삼각형 모습을 보이고 있다.)

맨위에서부터 오른쪽 아래에 있는 꼭지점 상단 1개 (하나의 삼각형 모습을 보이고 있다.)


이때 최소 단위의 형태는 3개의 높이의 별 삼각형 모습이고 이것을 기저조건으로 세운 후 높이가 3이되면 별을 찍어준다.

그리고 위에서 나눈 3개의 기준 좌표를 재귀함수로 넘기면서 각위치 마다 삼각형을 전부 그려준다.


따라서 재귀함수를 전부 돌면서 최소단위인 별 삼각형을 전부 찍어주면서 재귀가 끝난후 출력해주면 답을 구할 수 있다.


소스코드)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<stdio.h>
char star[3073][6148];
void solve(int x, int y , int n)
{
    //three part 삼각형을 그리는 함수이다. 
    if(n == 3// 높이가 3일때 star 그린다. 
    {
        star[x][y] = '*';
        star[x+1][y-1= '*';
        star[x+1][y+1= '*';
        star[x+2][y-2= '*';    
        star[x+2][y-1= '*';
        star[x+2][y] = '*';
        star[x+2][y+1= '*';
        star[x+2][y+2= '*';
    } 
    else
    {
        solve(x,y,(n/2)); // 1part 
        solve(x+(n/2),y-(n/2),(n/2)); //2part
        solve(x+(n/2),y+(n/2),(n/2)); // 3part
    }
}
int main()
{
    int N;
    scanf("%d"&N);
    for(int i =0; i<N; i++)
    {
        for(int j =0; j<N*2; j++)
        {
            star[i][j] = ' '// 공백을 초기화해준다. 이것안해서 틀렸었다...
        }
    }
    solve(0, N-1, N); // 삼각형의 맨위의 좌표 
    
    for(int i =0; i<N; i++)
    {
        for(int j =0; j<N*2; j++)
        {
            printf("%c",star[i][j]);
        }
        printf("\n");
    }
    return 0;
}
cs




반응형

'PS > 백준' 카테고리의 다른 글

1065번 한수  (0) 2018.11.16
1110번 더하기 사이클  (0) 2018.11.14
1966번 프린터 큐  (0) 2018.10.28
7576번 토마토  (0) 2018.10.24
2839 설탕배달  (0) 2018.10.19

+ Recent posts