작성일 :

문제 링크

10996번 - 별 찍기 - 21

설명

주어진 자연수 N에 따라 별(*)과 공백( )이 반복되는 패턴을 출력하는 문제입니다.


출력되는 전체 줄 수는 2 * N이며, 각 줄에는 N개의 문자가 포함됩니다.

출력 규칙은 다음과 같습니다:

  • 짝수 번째 줄은 홀수 번째 열에만 별이 출력됩니다.
  • 홀수 번째 줄은 짝수 번째 열에만 별이 출력됩니다.
  • 이를 통해 별과 공백이 번갈아 나타나는 구조를 가집니다.

단, N = 1인 경우에는 예외적으로 별 하나만 출력합니다.


접근법

먼저, 입력받은 값이 1인 경우에는 조건 없이 별 하나만 출력하면 됩니다.

그 외의 경우에는 총 2 * N개의 줄을 출력해야 하며, 각 줄마다 N개의 문자를 구성하게 됩니다.

줄 번호가 짝수인지 홀수인지에 따라 별과 공백이 번갈아 출력되는 방식이 달라집니다:

  • 줄 번호가 짝수일 때는 첫 번째 문자부터 별이 시작되고, 이후 공백과 번갈아 출력됩니다.
  • 줄 번호가 홀수일 때는 공백으로 시작한 뒤, 별과 공백이 번갈아 출력됩니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;

class Program {
  static void Main() {
    int n = int.Parse(Console.ReadLine());

    if (n == 1) {
      Console.WriteLine("*");
      return;
    }

    for (int r = 0; r < 2 * n; r++) {
      for (int c = 0; c < n; c++) {
        if ((r % 2 == 0 && c % 2 == 0) || (r % 2 == 1 && c % 2 == 1))
          Console.Write("*");
        else Console.Write(" ");
      }
      Console.WriteLine();
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n; cin >> n;
  if (n == 1) {
    cout << "*\n";
    return 0;
  }
  for (int r = 0; r < 2 * n; r++) {
    for (int c = 0; c < n; c++) {
      if (r % 2 == 1 && c % 2 == 0) cout << " ";
      else if (r % 2 == 0 && c % 2 == 1) cout << " ";
      else cout << "*";
    }
    cout << "\n";
  }

  return 0;
}