trimEnd()

백준 별 찍기 - 18 문제를 풀었다.

답은 맞는 것 같은데 계속 “출력 형식이 잘못되었습니다” 오답이 발생했다.

출력 예시를 보니 찍어진 별들의 오른쪽 공백이 없는 것을 확인했다.

문자열의 오른쪽 공백만 없에는 함수 trimEnd()를 사용해 출력 형식을 고칠 수 있었다.


// 2022-03-17
// https://www.acmicpc.net/problem/10993

import java.io.*
import java.math.BigInteger
import kotlin.math.pow

var n =0
lateinit var graph:Array<CharArray>
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val sb = StringBuilder()
    n = readLine().toInt()
    val ls = 2.0.pow(n).toInt()-1
    graph = Array(ls){CharArray(ls*2-1){' '} }
    re(0,(ls*2-1)/2,n)

    // trimEnd() 함수를 통해 오른쪽 공백을 없에야 출력 형식이 맞습니다!! 조심할 것
    for(i in graph.indices){
        sb.append(String(graph[i]).trimEnd())
        if(i!=graph.lastIndex)sb.append('\n')
    }
    println(sb)
}

fun re(x:Int, y:Int, size:Int){
    if(size ==1) {
        graph[x][y] = '*'
        return
    }
    val ls = 2.0.pow(size).toInt()-1
    if(size%2==0){
        for(i in 0 until ls){
            graph[x][y+i]='*'
            graph[x][y-i]='*'
            graph[x+ls-1-i][y-i] = '*'
            graph[x+ls-1-i][y+i] = '*'
        }
        re(x+1, y, size-1)
    }else{
        for(i in 0 until ls){
            graph[x+i][y-i] = '*'
            graph[x+i][y+i] = '*'
            graph[x+ls-1][y+i] ='*'
            graph[x+ls-1][y-i] ='*'
        }
        re(x+2.0.pow(size-1).toInt()-1,y,size-1)
    }
}