본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 13015 별 찍기 - 23

by 까망 하르방 2021. 2. 26.
반응형

출처https://www.acmicpc.net/problem/13015

 Input 
2

 Output 

** **
 ***
** **

별도 메모리를 잡지 않고 2n - 1 줄에 거쳐 출력.

3가지 영역으로 구분합니다. 첫번째 / 중간 / 마지막 (첫번째와 마지막은 동일한 출력)

① 초기 a, b, c, d의 값은 아래와 같습니다.

▶ a = 0 , b = n - 1

▶ c = 3n - 3, d = 4n - 4

n번째 줄까지는 a와 b는 증가 / c와 d는 감소

n번째 줄 이후로는 a와 b는 감소 / c와 d는 증가

 

② 별을 찍는 형태는 아래와 같습니다.

[첫번째와 마지막 줄]

▶ a 별 b 공백 c 별 d

 

[중간]

▶ 공백 a 공백 b 공백 c 공백 d

* n번째 줄에 해당하는 정가운데에서는 b와 c가 같은 경우 3개의 별이 출력됩니다.

 

 [문제] BOJ 별 찍기 시리즈

 

[문제] BOJ 별 찍기 시리즈

[BOJ] 2438 별 찍기 - 1 [BOJ] 2439 별 찍기 - 2 [BOJ] 2440 별 찍기 - 3 [BOJ] 2441 별 찍기 - 4 [BOJ] 2442 별 찍기 - 5 [BOJ] 2443 별 찍기 - 6 [BOJ] 2444 별 찍기 - 7 [BOJ] 2445 별 찍기 - 8 [BOJ] 2446 별..

zoosso.tistory.com


#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
 
int main(void) {
    int n;
    cin >> n;
 
    int a = 0, b = n - 1;
    int c = 3 * n - 3, d = 4 * n - 4;
 
    for (int i = 1; i < 2 * n; ++i) {
        // 첫번째 혹은 마지막 줄인 경우
        if (i == 1 || i == (2 * n) - 1) {
            for (int j = a; j <= b; j++) printf("*");
            for (int j = b + 1; j < c; j++) printf(" ");
            for (int j = c; j <= d; j++) printf("*");
        }
        else {
            for (int j = 0; j < a; j++) printf(" ");
            printf("*"); // a
            for (int j = a + 1; j < b; j++) printf(" ");
            printf("*"); // b
            for (int j = b + 1; j < c; j++) printf(" ");
            // b와 c의 위치가 동일한 경우 중복 출력 x
            if(b != c) printf("*"); // c
            for (int j = c + 1; j < d; j++) printf(" ");
            printf("*"); // d
        }
        printf("\n");
 
 
        if (i < n) {
            a++; b++; c--; d--;
        }
        else {
            a--; b--; c++; d++;
        }
    }
    return 0;
}

 

반응형

댓글