<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[백준 2447] 별찍기10

BlockDMask 2017. 11. 22. 14:00
반응형
  • 안녕하세요. BlockDMask 입니다.

  • 별찍기 시리즈의 열번째 입니다.

0. 제목

  • 백준 2447 별찍기10

  • BOJ 2447 별찍기10

  • C++ 별찍기 반복문

1. 문제 설명

  • 아래 사진을 보고 별찍는 규칙을 유추한 뒤에 별을 찍어 보시오.

  • 첫째 줄에 N이 주어진다. 
    N은 항상 3의 제곱꼴인 수이다.
    (1, 3, 9, 27, ...)
    (N=3^k, 0<=k<8)

2. 풀이 과정

  • 분할정복(divided and conquer) 방식으로 풀었습니다.

  • 사실 작은 범위 1일때
    3일때
    9일때의 규칙을 찾아서
    그 규칙에 맞게 코드를 짰습니다.

  • 이런식으로 해서 규칙을 찾아서 작성했습니다.
    반복문을 이용했습니다.


3. 소스 코드


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
//https://www.acmicpc.net/problem/2447
//BOJ_2447_star10
 
#include<iostream>
#include<cstdio>
using namespace std;
 
class star{
private:
    int n;
public:
    star(int n): n(n){}
 
    void callDraw() {
        for(int y=0; y<n; y++){
            for(int x=0; x<n; x++){
                draw(y,x);
            }
            printf("\n");
        }
    }
    void draw(int dy, int dx){
        while(dy!=0){
            if(dy%3==1 && dx%3==1){ //몫을 3으로 나누었을때 나머지가 둘다 나머지 1일때
                printf(" ");
                return;
            }
            dy/=3;  //3으로 나누어 몫을 만든다.
            dx/=3;
        }
        printf("*");
    }
 
};
 
int main(void){
    int n;
    scanf("%d"&n);
    star *= new star(n);
    s->callDraw();
    delete s;
    return 0;
}
cs


4. 인증


문제출처 - https://www.acmicpc.net/problem/2447

감사합니다.

반응형