HOIT_B

[백준] C# 2522 별찍기 12 본문

작고소중한 알고리즘 풀기

[백준] C# 2522 별찍기 12

HOIT_77 2021. 1. 24. 15:21
728x90

[문제]

www.acmicpc.net/problem/2522

 

2522번: 별 찍기 - 12

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

 

[ ] 

처음엔 기존에 풀었던 별 찍기와 비슷하게 코드를 짰다. 

하지만 출력 형식이 잘못되었다 해서 다른 방법을 찾아야 했다. 

 

[코드]

using System;

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

        for(int i=0; i<2*n-1; i++){
            for(int j=0; j<Math.Abs(n-1-i); j++){
                Console.Write(" ");
            }
            
            for(int j=0; j<Math.Abs(n-Math.Abs(n-(i+1))); j++){
                Console.Write("*");
            }
            
            Console.WriteLine();
        }
        
    }
}

위의 코드는 Math.Abs를 이용한 코드이다. 

 

처음에 생각했던 코드는 아래의 코드이다.

//오른쪽 정렬로 순서대로 커졌다가 작아임 
using System;

class star{
    static void Main(){
        int n = int.Parse(Console.ReadLine());
        
        for(int i=1; i<=n; i++){
            for(int j=0; j<n-i; j++){
                Console.Write(" ");
            }
            for(int k=0; k<i; k++){
                Console.Write("*");
            }
            Console.WriteLine();
        }
        for(int i=1; i<=n-1; i++){
            for(int j=0; j<n-i; j++){
                Console.Write(" ");
            }
            for(int k=n-i; k>0; k--){
                Console.Write("*");
            }
            if(i != n-1){
                Console.WriteLine();
            }
        }
         
        
    }
}

출력 형식이 잘못되었습니다. 라는 메시지가 그냥 틀렸다는 뜻이었다. 

아래처럼 수정하니 정답이었다. 

 

//오른쪽 정렬로 순서대로 커졌다가 작아임 
using System;

class star{
    static void Main(){
        int n = int.Parse(Console.ReadLine());
        
        for(int i=0; i<n; i++){
            for(int j=n; j>i+1; j--){
                Console.Write(" ");
            }
            for(int k=0; k<=i; k++){
                Console.Write("*");
            }
            Console.WriteLine();
        }
        
        for(int i=n-1; i>0; i--){
            for(int j=n-1; j>i-1; j--){
                Console.Write(" ");
            }
            for(int k=0; k<i; k++){
                Console.Write("*");
            }
   
            Console.WriteLine();
            
        }
         
        
    }
}

생각한 알고리즘이 정답인지 확인하는 과정을 너무 생략했던 게 문제였다.

728x90

'작고소중한 알고리즘 풀기' 카테고리의 다른 글

[백준]C# 1463번 1로 만들기  (0) 2021.01.27
[백준]C# 2446 별찍기7  (0) 2021.01.25
[백준]C# 2445 별찍기8  (0) 2021.01.24
[백준]C# 2442 별 찍기 5  (0) 2021.01.23
[백준] 1924 번 C#  (0) 2021.01.23
Comments