728x90
https://www.acmicpc.net/problem/2447
문제
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.
크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.
***
* *
***
N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.
해설
우선 N이 3인 경우
이와 같은 형태를 뛴다. (1, 1)이 빈칸으로 있는 것을 알 수 있다.
이러한 도형이 나열이 되있다 하면, i%3==1 && j%3==1일 때 빈 칸을 찍으면 된다.
N이 9인 경우를 보자.
가운데 빈칸이 있는 것을 확인할 수 있다.
이는 (3, 3), (3, 4), (3, 5), (4, 3), (4, 4), (4, 5), (5, 3), (5, 4), (5, 5)가 빈 칸으로 있는 것을 확인할 수 있다.
이 부분이 비어있다는 것을 바꿔보면 (i/3)%3==1 && (j/3)%3==1일 때 빈 칸인 것이다.
이처럼 결국 3의 제곱수로 크기가 커져도 가운데에 빈칸이 생긴다는 조건은 같다.
이를 재귀를 돌리면 풀면 다음 코드와 같다.
소스 코드
import java.lang.StringBuilder
val sb = StringBuilder()
fun main() {
val num = readLine()!!.toInt()
for(i in 0 until num) {
for(j in 0 until num) {
print(i, j, num)
}
sb.append("\n")
}
println(sb.toString())
}
fun print(i: Int, j: Int, num: Int) {
if((i/num)%3==1 && (j/num)%3==1) sb.append(" ")
else {
if(num / 3 == 0) sb.append("*")
else print(i, j, num/3)
}
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 5568번: 카드 놓기 (1) | 2022.01.01 |
---|---|
[백준/BOJ] 11576번: Base Conversion (1) | 2021.12.31 |
[백준/BOJ] 11656번: 접미사 배열 (0) | 2021.12.29 |
[백준/BOJ] 1380번: 귀걸이 (0) | 2021.12.27 |
[백준/BOJ] 1251번: 단어 나누기 (0) | 2021.12.22 |
댓글