ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 2448번: 별 찍기 - 11
    문제해결 2023. 10. 25. 17:28

    별 찍기 - 11
    log2값이 0일때 삼각형을 추가하고, 아닐 경우 위가운데, 왼쪽아래, 오른쪽아래 이 세곳으로 재귀적으로 함수를 부르면 끝!
    삼성 구현 문제들 풀다보니 이정도 구현은 너무 쉽다! 삼성 고마워! 어제 풀었던 선물할인 문제가 훨씬 어려웠어..
     

    #include <bits/stdc++.h>
    
    #define FOR(i, n) for(int i = 0; i < int(n); i++)
    #define FORL(e, s) for(auto &e : s)
    #define endl "\n"
    
    using namespace std;
    
    int N;
    char MAP[4000][8000];
    
    void print_map() {
        FOR(i, N) {
            FOR(j, 2 * N)
                cout << MAP[i][j];
            cout << endl;
        }
    }
    
    void draw(int r, int c, int level) {
        if (level == 0) {
            MAP[r][c] = '*';
            MAP[r + 1][c - 1] = '*';
            MAP[r + 1][c + 1] = '*';
            MAP[r + 2][c - 2] = '*';
            MAP[r + 2][c - 1] = '*';
            MAP[r + 2][c] = '*';
            MAP[r + 2][c + 1] = '*';
            MAP[r + 2][c + 2] = '*';
            return;
        }
    
        int next_lv = level - 1;
        int next_r = r + 3 * pow(2, next_lv);
        int next_c_l = c - 3 * pow(2, next_lv);
        int next_c_r = c + 3 * pow(2, next_lv);
    
        draw(r, c, next_lv);				// 위 가운데
        draw(next_r, next_c_l, next_lv);	// 아래 왼쪽
        draw(next_r, next_c_r, next_lv);	// 아래 오른쪽
    }
    
    int main() {
        memset(MAP, ' ', sizeof(char) * 4000 * 8000);
        cin >> N;
        draw(0, N - 1, log2(N / 3));
        print_map();
    }

    '문제해결' 카테고리의 다른 글

    백준 1748번: 수 이어 쓰기1  (0) 2023.10.25
    백준 23291번: 어항 정리  (0) 2023.10.25
    백준 25947번: 선물할인  (0) 2023.10.25
    백준 10830번: 행렬 제곱  (0) 2023.10.25
    백준 9663번: N-Queen  (0) 2023.10.25
Designed by Tistory.