PS(Problem Solving)/BOJ

[백준/BOJ] 2444번: 별 찍기 - 7

JunsuKim 2021. 11. 19.
728x90

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

 

2444번: 별 찍기 - 7

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

www.acmicpc.net

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

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

출력

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

예제 입력1

5

예제 출력1

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

해설

2442번: 별 찍기 - 5, 2443번: 별 찍기 - 6 두 문제를 풀었다면 충분히 풀 수 있는 문제이다.

우선 4행을 기준으로 0, 1, 2, 3, 4행은 윗 삼각형, 5, 6, 7, 8행은 아래 삼각형으로 구분하였다.

윗 삼각형을 만드는 방법은 2442번에서 이미 했었다. 열(j)가 n - i - 1보다 작을 때 빈칸을, 그 외 n+ i보다 작을 때 *을 넣었다.

이제 아래 삼각형을 보겠다.

2443번과 같지만 행이 0부터 시작이 아닌 5행부터 시작이다.

따라서 j가 i - n보다 작거나 같을 때 빈칸을 넣고, n * 2 - 2 - (i - n)일 때 별을 넣도록 하였다.

소스 코드

import java.lang.StringBuilder

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

댓글