-
백준 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