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

블로그 메뉴

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

공지사항

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
윤굥굥
Algorithm/with Kotlin

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

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 팩토리얼
윤굥굥
윤굥굥

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.