PS(Problem Solving)/BOJ

[백준/BOJ] 2442번: 별 찍기 - 5

JunsuKim 2021. 11. 17.
728x90

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

 

2442번: 별 찍기 - 5

첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다.

www.acmicpc.net

문제

첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제

별은 가운데를 기준으로 대칭이어야 한다.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

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

예제 입력1

5

예제 출력1

    *
   ***
  *****
 *******
*********

해설

예제 출력을 보자. 행 = i, 열 = j, 입력 = n이라 하자.

0행에서는 4열에만 *이 있고, 1행에는 3~5열,  . . . n행에는 0~8열에 *이 있다.

규칙을 찾아보면  n - i - 1 > j일 때 빈 칸을 먼저 입력한 후 n + i 보다 작은 값에 *을 넣으면 된다.

0행: 5 - 0 - 1 = 4, 5 + 0 = 5 -> 4보다 열이 작을 시 빈칸, 그 외 5보다 작은 열 *

1행: 5 - 1- 1 = 3, 5 + 1 = 6 -> 3보다 열이 작을 시 빈칸, 그 외 6보다 작은 열 *

.

.

4행: 5 - 4 - 1 = 0, 5 + 4 = 9 -> 0보다 열이 작을 시 빈칸, 그 외 9보다 작은 열 *

이대로 별을 찍어보면 예제 출력과 같은 결과가 나온다.

소스 코드

import java.lang.StringBuilder

fun main() {
    val input = readLine()!!.toInt()
    val sb = StringBuilder()
    for(i in 0 until input){
        for(j in 0 until input * 2 - 1){
            when {
                j < input - i - 1 -> sb.append(" ")
                j < input + i -> sb.append("*")
            }
        }
        sb.append("\n")
    }
    println(sb.toString())
}
728x90

댓글