๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 10994๋ฒˆ: ๋ณ„ ์ฐ๊ธฐ - 19

by nitronium102 2022. 6. 28.

๋ฌธ์ œ

์˜ˆ์ œ๋ฅผ ๋ณด๊ณ  ๊ทœ์น™์„ ์œ ์ถ”ํ•œ ๋’ค์— ๋ณ„์„ ์ฐ์–ด ๋ณด์„ธ์š”.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(1 ≤ N ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ณ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

๊ทœ์น™์„ ๋„์ €ํžˆ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ์•ŒํŠœ๋น„ํŠœ ํ’€์ด ๋ณด๊ณ  ๊ฒจ์šฐ ํ’€์—ˆ๋‹ค. 

1. ๋ณ„์˜ ๊ฐ€๋กœ ์„ธ๋กœ ๊ธธ์ด๊ฐ€ 4n+3๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

2. ์ƒˆ๋กœ์šด ๋ณ„์˜ ์‹œ์ž‘ ์œ„์น˜๋Š” (+2, +2), ๊ฐ€๋กœ ์„ธ๋กœ ๊ธธ์ด๋Š” -4์ด๋‹ค.

 

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ณ„ ์ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

1. ์ข…๋ฃŒ ์กฐ๊ฑด : width๊ฐ€ 1์ธ ๊ฒฝ์šฐ ๋” ์ด์ƒ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. ๋ณ„์„ ํ•˜๋‚˜ ์ฐ์–ด์ฃผ๊ณ  return(๊ฒ€์€์ƒ‰)

2. ์ƒˆ๋กœ์šด ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ : ์‹œ์ž‘ ์œ„์น˜ (+2, +2), ๊ฐ€๋กœ ์„ธ๋กœ ๊ธธ์ด -4

3. ํ˜„์žฌ ํ˜ธ์ถœ๋œ ๋ณ„ ์ฐ๊ธฐ : ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ป—์–ด๋‚˜๊ฐ€๋Š” ํ˜•์‹์ด๋‹ค. (๋…ธ>์ดˆ>ํŒŒ>๋ณด)

#include <iostream>
#include <vector>
using namespace std;

void makeStar(int x, int y, int width, vector<vector<char>> &star){
    // ์ข…๋ฃŒ์กฐ๊ฑด
    if (width == 1){
        star[x][y] = '*';
        return;
    }

    // ๊ฐ€์šด๋ฐ ์ž‘์€ ๋ณ„ ์ƒ์„ฑ - index ์ด๋™ : x, y ์ธ๋ฑ์Šค๋Š” +2, width๋Š” -4
    makeStar(x+2, y+2, width-4, star);

    // ํ˜„์žฌ ๋ณ„ ์ฑ„์šฐ๊ธฐ
    for (int i=x; i<x+width; i++)
        star[i][y] = star[x][i] = star[x + width - 1][i] = star[i][y+width-1] = '*';
}

int main(){
    int n;
    cin >> n;

    int width = 4*n - 3;
    vector<vector<char>> star(width, vector<char>(width, ' '));

    makeStar(0, 0, width, star);

    for (int i=0; i<width; i++){
        for (int j=0; j<width; j++)
            cout << star[i][j];
        cout << "\n";
    }

}

๋Œ“๊ธ€