https://www.acmicpc.net/problem/2448
재귀를 이용해서 풀어주면 된다. boj 2447문제도 재귀를 활용한 별찍기 문제인데 2448이 생각하는데 조금더 시간이 걸렸다.
출력은 잘 되는데 자꾸 틀렸습니다가 떠서 찾아봤더니 백준에선 출력을 읽을때 null을 읽으면 틀렸습니다 처리를 한다고 한다.
가로의 길이가 세로의 길이의 두배인 것을 잘 확인해서 문제를 풀었지만 map[][]을 선언할때 가로길이를 두배로 두지 않아서 1차로 헤맸다.
map[][]을 ' '로 fill해줄때 선언한 것에 맞게 여기도 가로길이를 세로길이의 두배로 두지않아서 2차로 헤맸다.
('틀렸습니다'가 아니라 '시간초과'가 떠서 더 헤맸다.. 멀쩡한 재귀함수만 두들기면서 한 시간은 시간 허비한 것 같다..)
좀 침착하게 문제를 풀 필요가 있는 것 같다ㅠㅠ
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAX_V = 3072;
char map[MAX_V][MAX_V*2];
void make_map(int y, int x) {
map[y][x] = '*';
map[y + 1][x - 1] = map[y + 1][x + 1] = '*';
for (int i = 0; i < 5; i++) map[y + 2][x - 2 + i] = '*';
}
void go(int cy, int cx, int n) {
if (n == 3) {
make_map(cy, cx);
return;
}
go(cy, cx, n / 2);
go(cy + n / 2, cx - n / 2, n / 2);
go(cy + n / 2, cx + n / 2, n / 2);
}
int main() {
int n;
fill(&map[0][0], &map[MAX_V - 1][MAX_V*2], ' ');
scanf("%d", &n);
go(0, n - 1, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n * 2 - 1; j++)
printf("%c", map[i][j]);
printf("\n");
}
}
'알고리즘 > 백준 & swacademy' 카테고리의 다른 글
BOJ 1182 - 부분수열의 합 (0) | 2019.07.06 |
---|---|
BOJ 9663 - N QUEEN (0) | 2019.07.06 |
BOJ 15649 - N과 M (1~12) (0) | 2019.07.06 |
BOJ 1074 - Z (0) | 2019.07.04 |
(인강)기초-dp1 (0) | 2019.06.23 |