• Kimcoding's Dev Note!
    • About
    • Posts
    • Categories
    • Tags
    • Projects

    [BOJ | 백준] 10993번: 별 찍기 - 18

    by Kimcoding on 2020-03-27 02:08

    in BOJ

    문제 설명


    BOJ 10993


    아름답네요 별 찍기 18



    풀이


    재귀함수를 썼습니다.

    N의 크기에 따라 규칙을 찾아야 합니다.


    N의 높이는 2 ^ i - 1입니다.

    위의 식으로 행 좌표를 구하면서 재귀함수를 호출합니다.

    열 범위도 구해서 별을 찍어주면 저런 예쁜 모양이 나옵니다 하하


    N이 홀수, 짝수에 따라 모양이 다르고 인덱스가 달라지기 때문에 구별해서 구현하시면 됩니다.

    다른 부분은 이제 구현만 마무리 잘하시면 될 것 같습니다. 구현만 하면 되는 문제라…

    구현을 하는데 어려움이 있으시면 코드를 보고 참고하세요!



    소스 코드

    #include <bits/stdc++.h>
    #define FIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
    #define FOR(a,b,c) for(int a = (b); a <= (c); a++)
    using namespace std;
    
    int main() {
    	FIO;
    	char map[1 << 10][1 << 11] = {};
    	int n; cin >> n;
    
    	function <void(int, int)> f = [&](int r, int d) {
    		if (!d) return;
    		int mid = (1 << n) - 2, h = (1 << d) - 2;
    		FOR(i, 0, h) {
    			int x = d & 1 ? i : h - i;
    			FOR(j, mid - h, mid + i) {
    				if (j == mid + i || j == mid - i || i == h)
    					map[r + x][j] = '*';
    				else map[r + x][j] = ' ';
    			}
    		}
    		f(d & 1 ? r + (h >> 1) : r + 1, d - 1);
    	};
    	
    	f(0, n);
    	FOR(i, 0, (1 << n) - 2)
    		cout << map[i] << '\n';
    	return 0;
    }
    


    PSBOJRecursionGold Share Tweet +1

    CATALOG