B2447

개요

백준 문제 2447번을 풀면서 어려웠던 점과 코드를 정리한다.
소요 시간 : 120분
https://www.acmicpc.net/problem/2447

문제

N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다.
예를 들어 N이 27의 패턴은 예제 출력 1과 같다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
using namespace std;


void printStar(int i,int j,int n)
{
if((i /n) % 3 == 1 && (j /n)% 3 ==1)
{
printf(" ");
}
else
{
if(n == 1)
{
printf("*");
}
else
{
printStar(i,j,n/3);
}



}

}

void solve()
{
int n;
cin >> n;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printStar(i,j,n);
}
cout << endl;
}


}

int main()
{
solve();

}

풀이

  1. 분할은 N에서 3씩 나누면서 3 혹은 1에서 출력을 하는 식으로 풀 수 있음.
  2. 출력은 한 줄씩 해야하는 방향으로 구현해야 함.
  3. 중간의 비어있는 별 모양은 예외처리 할 것.

배울 점, 메모

분할에 있어서 출력하는 조건문이 처리를 어떻게 할 지 고민했는데 결국 1시간 반이 지나서 인터넷에서 찾아봤다.
문제를 잘 풀기 위해서 다음을 계속 생각해야함.

  1. 분할을 어떻게 구현할 지 생각해야함.
  2. 1 이루고자 하는 목적을 분할함으로서 어떤 이점이 있는지 생각
  3. 어떤식으로 합칠 것인지 생각
Author

Praisebak

Posted on

2021-05-06

Updated on

2021-05-06

Licensed under

Comments