https://www.acmicpc.net/problem/10997
다른풀이들 보면 재귀로 풀었는데
재귀쓸 필요없이
while문에 두면 풀이가 쉬워서 올림.
#include<stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
using namespace std;
char map[400][400];
#define LEFT 0
#define RIGHT 1
#define UP 2
#define DOWN 3
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
int curX = 0;
int curY = 4*n-3-1;
int leftMargin = 0;
int rightMargin = 0;
int topMargin = 0;
int bottomMargin = 0;
int dir = LEFT;
int centerX = ((4 * n - 1) / 2) + 1;
int centerY = (curY / 2);
for (int i = 0; i < 4 * n - 1; i++) {
for (int j = 0; j < 4 * n - 3; j++) {
map[i][j] = ' ';
}
}
if (n == 1) {
cout << "*";
return 0;
}
while (!(curX == centerX && curY == centerY)) {
if (dir == LEFT) {
for (int i = curY; i >= leftMargin; i--) {
map[curX][i] = '*';
curY = i;
}
dir = DOWN;
}
if (dir == DOWN) {
for (int i = curX; i < 4 * n - 1 - bottomMargin; i++) {
map[i][curY] = '*';
curX = i;
}
dir = RIGHT;
}
if (dir == RIGHT) {
for (int i = curY; i < 4 * n - 3 - rightMargin; i++) {
map[curX][i] = '*';
curY = i;
}
dir = UP;
}
if (dir == UP) {
topMargin += 2;
for (int i = curX; i >= topMargin; i--) {
map[i][curY] = '*';
curX = i;
}
dir = LEFT;
leftMargin += 2;
bottomMargin += 2;
rightMargin += 2;
}
}
for (int i = 0; i < 4 * n - 1; i++) {
for (int j = 0; j < 4 * n - 3; j++) {
if (i == 1) {
cout << "*";
break;
}
cout << map[i][j];
}
cout << "\n";
}
return 0;
}
'PS > 백준' 카테고리의 다른 글
[백준 14906] 스러피 (0) | 2021.09.22 |
---|---|
[백준 10993] 별 찍기 - 18 (0) | 2021.09.21 |
[백준 9370] 미확인 도착지 (0) | 2021.08.09 |
[백준 2283] 구간 자르기 (0) | 2021.07.27 |
[백준 9465] 스티커 (0) | 2020.09.01 |
댓글