728x90
https://www.acmicpc.net/problem/2445
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
예제 입력1
5
예제 출력1
* *
** **
*** ***
**** ****
**********
**** ****
*** ***
** **
* *
해설
예제를 보면 행은 9줄, 열은 10줄이 있다.
따라서 우선 이중 for문을 만들어 행은 n * 2 - 1만큼 루프를 만들고, 열은 n * 2의 루프를 만든다.
이제 별이 찍힌 규칙을 살펴보자.
우선 행 값이 n보다 작을 때와 클 때로 구분하였다.
0, 1, 2, 3, 4행을 보면 열 값이 행 값보다 작거나 같을 때와 n * 2 - 행 값 - 1보다 클 때 별이 찍히는 것을 볼 수 있다.
이제 5, 6, 7, 8행을 보자.
위와 똑같지만 행 값이 n보다 커졌기 때문에 식을 고쳐야 한다.
열 값이 n * 2 - 행 값 - 1보다 작을 때, n * 2 - (n * 2 - 행 값)보다 클 때 별이 찍힌다.
이를 토대로 코드를 만들면 다음과 같다.
소스 코드
import java.lang.StringBuilder
fun main() {
val n = readLine()!!.toInt()
val sb = StringBuilder()
for(i in 0 until n * 2 - 1){
for(j in 0 until n * 2){
if(i < n) {
when {
j <= i -> sb.append("*")
j >= n * 2 - i - 1 -> sb.append("*")
else -> sb.append(" ")
}
}
else {
when {
j < n * 2 - i - 1 -> sb.append("*")
j > n * 2 - (n * 2 - i) -> sb.append("*")
else -> sb.append(" ")
}
}
}
sb.append("\n")
}
println(sb.toString())
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 4619번: 루트 (0) | 2021.11.22 |
---|---|
[백준/BOJ] 2446번: 별 찍기 - 9 (0) | 2021.11.20 |
[백준/BOJ] 2444번: 별 찍기 - 7 (0) | 2021.11.19 |
[백준/BOJ] 2443번: 별 찍기 - 6 (0) | 2021.11.18 |
[백준/BOJ] 2442번: 별 찍기 - 5 (0) | 2021.11.17 |
댓글