구현, 수학

[백준] 2445. 별 찍기 - 8 풀이

hch06 2025. 2. 2. 21:49

https://www.acmicpc.net/problem/2445

 

첫번째 줄에 별1개와 공백 N-1개, 두번째 줄에 별 2개와 N-2개...N번째 줄에 별 N개를 출력하는 형식에서 각 줄의 공백 수만큼 해당 줄에 추가하고, 각 줄의 별 수만큼 해당 줄에 추가하였다. 이는 상하 대칭이므로 이 과정을 역으로 한번 더 출력했다. 이때 역으로 출력하는 반복문의 경우 가장 첫번째 과정은 제외해야 한다.

 


C

더보기
#include <stdio.h>

void prints(int v, int n) {
    for(int i = 0; i < n; i++) printf("*");
    for(int i = 0; i < v; i++) printf(" ");
    for(int i = 0; i < n; i++) printf("*");
    printf("\n");
}

int main() {
    int n; scanf("%d", &n);
    for(int i = 1; i <= n; i++) prints((n*2) - (i+i), i);
    for(int i = n-1; i >= 1; i--) prints((n*2) - (i+i), i);
}

Python

더보기
def prints(v, n):
    for _ in range(n): print('*', end='')
    for _ in range(v): print(' ', end='')
    for _ in range(n): print('*', end='')
    print()

n = int(input())
for i in range(1, n+1): prints((n*2) - (i+i), i)
for i in range(n-1, 0, -1): prints((n*2) - (i+i), i)

Java

더보기
import java.util.Scanner;

public class Main {
    static void printStar(int space, int star){
        for(int i = 0; i < space; i++) System.out.print(" ");
        for(int i = 0; i < star; i++) System.out.print("*");
    }
    public static void main(String args[]) {
      Scanner s = new Scanner(System.in);
      int n = s.nextInt();
      
      for(int i = 1; i <= n; i++){
          printStar(0, i); printStar((n*2)-(2*i), i);
          System.out.print("\n");
      }
      for(int i = n-1; i > 0; i--){
          printStar(0, i); printStar(2*(n-i), i);
          System.out.print("\n");
      }
    }
}

JavaScript

더보기
function printStar(space, star){
    res = ''
    for(let i = 0; i < space; i++) res += ' '
    for(let i = 0; i < star; i++) res += '*'
    return res
}

n = parseInt(require('fs').readFileSync(0))
for(let i = 1; i <= n; i++){
    str = ''
    str += printStar(0, i)
    str += printStar((n*2)-(2*i), i)
    console.log(str)
}
for(let i = n-1; i > 0; i--){
    str = ''
    str += printStar(0, i); str += printStar(2*(n-i), i)
    console.log(str)
}