๋ฌธ์ œ

https://www.acmicpc.net/problem/2448

ํ’€์ด

์ด ๋ฌธ์ œ ๋˜ํ•œ โ€œ2447 - ๋ณ„์ฐ๊ธฐ - 10โ€ ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๋กœ ๋‹ค์–‘ํ•œ ๋ชจ์–‘์œผ๋กœ ๋ณ„์„ ์ฐ๋Š” ๋ฌธ์ œ๋‹ค.

์ด๋ฒˆ ๋ฌธ์ œ๋„ 2447๋ฒˆ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ”„๋ž™ํƒˆ ๋„ํ˜• ํ˜•ํƒœ์˜ ๋ณ„์„ ์ฐ๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” 2447๋ฒˆ ๋ฌธ์ œ์—์„œ ํ”„๋ž™ํƒˆ ๋„ํ˜•์˜ ์˜ˆ์‹œ๋กœ ๋ณด์—ฌ์คฌ๋˜ ์‚ผ๊ฐํ˜• ์‚ฌ์ง„์„ ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ๋˜๋Š” ๋ฌธ์ œ๋‹ค. 2447๋ฒˆ ๋ฌธ์ œ : https://hoshi2710.github.io/%EB%B0%B1%EC%A4%80/2447

์ถœ์ฒ˜ : https://m.blog.naver.com/jamogenius/220886627296

๊ทธ๋Ÿฌ๋‚˜ 2447๋ฒˆ ์—์„œ ํ’€์—ˆ๋˜ ๋ฐฉ์‹์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋‹ˆ ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๊ฑธ๋ ค๋ฒ„๋ ธ๋‹ค.

2447๋ฒˆ์—์„œ๋Š” ๋จผ์ € ์ œ์ผ ๋ฉ”์ธ์ธ ํฐ ๋„ํ˜•์„ ๋งŒ๋“ค๊ณ  src๋ฐฐ์—ด์— ๊ทธ๊ฒƒ๋ณด๋‹ค ์ž‘์€ ํ”„๋ž™ํƒˆ ๋„ํ˜•์„ ๋งŒ๋“ค๊ณ  ๊ฒฐ๊ณผ๋ฌผ์— ๋ถ™์ด๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ–ˆ๋Š”๋ฐ ์ด๋ฌธ์ œ์—์„œ๋Š” ๊ทธ ๊ณผ์ •์„ ๊ทธ๋Œ€๋กœ ์ ์šฉํ–ˆ์„๋•Œ ๊ณผ์ •์ด ๋” ๋ณต์žกํ•ด์ง€๊ณ  ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์–ด ์ด๋ฒˆ์—๋Š” ๋ฐฉ๋ฒ•์„ ์•ฝ๊ฐ„ ๋ณ€ํ˜• ์‹œ์ผœ๋ณด์•˜๋‹ค.

๋ฐ”๋กœ ์ œ์ผ ํฐ ๋„ํ˜•์„ ๊ทธ๋ฆฌ๊ณ  ๋‚œ ๋‹ค์Œ ๊ทธ ์ดํ›„ ์ž‘์€ ์‚ผ๊ฐํ˜•์„ ๋ถ™์ด๋Š” ๋Œ€์‹  ์‚ผ๊ฐํ˜• ๋ชจ์–‘์˜ ๊ณต๋ฐฑ์˜์—ญ์„ ๊ณ„์† ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

๋Œ€์ถฉ ์ด๋Ÿฐ ์‚ผ๊ฐํ˜•์„ ์ œ์ผ ๋ฉ”์ธ์œผ๋กœ ๋จผ์ € ๋งŒ๋“ ๋‹ค์Œ

์ด๋Ÿฐ ๋ชจ์–‘์œผ๋กœ ๊ณต๋ฐฑ์„ ๋„ฃ์–ด ์—ญ ์‚ผ๊ฐํ˜• ๋ชจ์–‘์œผ๋กœ ๊ตฌ๋ฉ์„ ๋šซ๊ณ  ์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์†Œ์Šค

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main()
{
	int height = 0, width = 0, looped = 1;
	bool** res; //[์„ธ๋กœ][๊ฐ€๋กœ] (False = '*', True = ' ')

	scanf("%d", &height);

	width = height * 2 - 1;
	int origin_width = width, origin_height = height;

	res = (bool**)malloc(sizeof(bool*) * height);
	for (int i = 0; i < height; i++)
	{
		res[i] = (bool*)malloc(sizeof(bool*) * width);
		memset(res[i], true, sizeof(bool) * origin_width);
	}

	for (int j = origin_height - 1; j >= 0; j--) //๋ณ„์ฐ๊ธฐ
		memset(res[j] + (origin_height - j - 1), false, sizeof(bool) * (width - ((height - j - 1) * 2)));
	for (int j = height / 2; j < height; j++) // ๊ฐ€์šด๋ฐ ๋นˆ์นธ ์‚ฝ์ž…
		memset(res[j] + j + (height == 3 ? 1 : 0), true, sizeof(bool) * ((((width - 1) / 2) - ((j - (height / 2)) * 2)) - (height == 3 && j == 1 ? 1 : 0)));

	while (height != 1)
	{
		width = (width - 1) / 2;
		height /= 2;
		for (int j = 1; j <= origin_height; j += origin_height / looped)
			for (int find = origin_width/2 - j; find < origin_width/2+j; find++)
				if (res[j - 1][find] == false)
					for (int k = 0; k < height; k++) // ๊ฐ€์šด๋ฐ ๋นˆ์นธ ์‚ฝ์ž…
						memset(res[j - 1 + k + height] + find - ((width - 1) / 2) + k, true, sizeof(bool) * (height != 1 ? (width - 2 * k) : 1));
		looped *= 2;
	}

	for (int i = 0; i < origin_height; i++)
	{
		for (int j = 0; j < origin_width; j++)
			putchar(!res[i][j] ? '*' : ' ');
		putchar('\n');
	}

	free(res);
}

while ๋ฌธ ๋ถ€๋ถ„์—์„œ ์—ฐ์‡„์ ์œผ๋กœ ์—ญ์‚ผ๊ฐํ˜• ๊ณต๋ฐฑ ๊ตฌ๋ฉ์„ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด ์ด๋ฃจ์–ด ์ง€๋Š”๋ฐ ์ œ์ผ ํฐ ์‚ผ๊ฐํ˜•์˜ ๋†’์ด ๊ฐ’์„ ์ด์šฉํ•ด 1,2,4,8๊ฐœ์˜ ์ค„๋กœ ์„ธ๋กœ ๊ตฌ์—ญ์„ ๋‚˜๋ˆ„์–ด ์—ญ์‚ผ๊ฐํ˜•์ด ๋“ค์–ด๊ฐˆ ๊ตฌ๊ฐ„์„ for๋ฌธ์„ ์ด์šฉํ•ด ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ตœ์ข…์ ์œผ๋กœ ๊ณต๋ฐฑ ์—ญ์‚ผ๊ฐํ˜•์„ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.