백준

백준 2444번 c#

대왕군 2024. 1. 15. 19:13

 

using System;

namespace Baekjoon
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //입력값 받아옴
            int input = int.Parse(Console.ReadLine());
            //기본 별 갯수 1로 지정
            int star = 1;

            //여기 설명에서 중간값은 출력줄의 중간의 의미함
            //ex) 3을 입력했을때 0,1,2로 반복이 되면 중간값은 1임

            //반복횟수는 input * 2 - 1회임
            for (int i = 0; i < input * 2 - 1; i++)
            {
                //중간값 이전의 공백출력
                if (i < input - 1)
                {
                    for (int k = 0; k < input - (i + 1); k++)
                    {
                        Console.Write(" ");
                    }
                }
                //중간값 이후의 공백출력
                else if (i > input - 1)
                {
                    for (int k = -(input - (i + 1)); k > 0; k--)
                    {
                        Console.Write(" ");
                    }
                }

                if (input == 1)
                {
                    //입력값 1일때 일부러 뛰어넘김
                }
                //첫번째 줄이 아니면서 input - 1값보다 i가 클때(즉, 중간값 아래일때)
                //혹은 중간값일때
                else if ((i != 0 && i < input - 1) || i == input - 1)
                {
                    //그릴 별 개수 2 더함
                    star += 2;
                }
                //
                else if (i > input - 1)
                {
                    //그릴 별 개수 2 뺌
                    star -= 2;
                }

                //star 수만큼 별 그림
                for (int k = 0; k < star; k++)
                {
                    Console.Write("*");
                }
                //개행
                Console.WriteLine();
            }

        }
    }
}

 

본인이 알고리즘 문제 풀때 제일 싫어하는게 별찍기다.. 나한테 별찍기가 왜 이렇게 어려운지 모르겠다.

다른 블로그보니까 코드도 간결하고 짧던데 더 노력해야겠다.