윤굥굥
yg323
윤굥굥
전체 방문자
오늘
어제
  • 굥굥 DEV
    • Computer Science
      • 자료구조 및 알고리즘
      • 운영체제
      • 네트워크
      • 데이터베이스
    • Programming Language
      • Java
      • Kotlin
    • Android
      • with Kotlin
    • Algorithm
      • with Kotlin
    • 하나씩 습득하는 중

블로그 메뉴

  • ↓백준 모아보기 ↓
  • 💚 플레티넘 문제 모아보기
  • 💛 골드 문제 모아보기
  • 🤍 실버 문제 모아보기
  • 🤎 브론즈 문제 모아보기

공지사항

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
윤굥굥

yg323

Algorithm/with Kotlin

[백준][코틀린] 2447 별 찍기 - 10

2022. 2. 4. 16:06

문제 내용

문제

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, …)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.

크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.

***
* *
***

N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.

입력

첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.

출력

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

예제 입력 예제 출력
27 ***************************
* ** ** ** ** ** ** ** ** *
***************************
***   ******   ******   ***
* *   * ** *   * ** *   * *
***   ******   ******   ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
*********         *********
* ** ** *         * ** ** *
*********         *********
***   ***         ***   ***
* *   * *         * *   * *
***   ***         ***   ***
*********         *********
* ** ** *         * ** ** *
*********         *********
***************************
* ** ** ** ** ** ** ** ** *
***************************
***   ******   ******   ***
* *   * ** *   * ** *   * *
***   ******   ******   ***
***************************
* ** ** ** ** ** ** ** ** *
***************************

문제 풀이

문제의 조건을 살펴보면, 만약에 좌표로 해당 패턴을 생각해보자, 그러면 1, 1일 때 빈칸이고 그 외에는 *이라는 것을 알 수 있다. 또한 해당 구조는 재귀적으로 반복되고 있다. 

따라서, 모든 좌표(?) 지점(?)을 2중 For문을 이용하여 돌면서, 그 지점을 num(3의 지수부)으로 나누었을때 1이라면 빈칸을, 0이라면 *를 그 외의 값이 나온다면 재귀 호출을 한다.

</>̆̈ 코드

private val sb = StringBuilder()

fun main() {
    val n = readLine()!!.toInt()

    for (i in 0 until n) {
        for (j in 0 until n) {
            stars(i, j, n / 3)
        }
        sb.append("\n")
    }

    print(sb.toString())
}

private fun stars(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 stars(i, j, num / 3)
}

링크

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

 

저작자표시 비영리 변경금지 (새창열림)
    'Algorithm/with Kotlin' 카테고리의 다른 글
    • [코틀린] 조합, 순열 구현하기
    • [백준][코틀린] 11729 하노이 탑 이동 순서
    • [백준][코틀린] 10870 피보나치 수 5
    • [백준][코틀린] 10872 팩토리얼
    윤굥굥
    윤굥굥

    티스토리툴바