[백준] 10994번 : 별 찍기 - JAVA
2024. 11. 14. 14:04 - DoosanBaek
문제분석 :
- n 값에 따라 일정한 규칙을 가진 별(*) 패턴을 출력
- n이 주어지변, 출력할 별 패턴은 크기가 4*n -3 인 정사각형 형태
- 중앙을 기준으로 별 테두리와 공백을 가지고, 가장 바깥쪽 테두리부터 안쪽으로 들어가면서 별 테두리 그린다.
- 재귀적으로 줄어드는 패턴
제약조건 :
- 첫번째 줄에 n이 주어진다. ( 1 <= n <= 100 )
- 백준 적정 시간내 출력되야된다
의사결정 :
- n 값을 읽을때 BufferdReader 의 readLine() 함수를 사용한다.
- 출력할 패턴의 배열을 초기화한다. 4 * n - 3 크기의 배열을 생성하고, 공백으로 초기화한다.
- 별 패턴을 재귀적으로 작성 한다.
- 배열을 출력 한다.
package com.doosane.study01.week01.bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Week02_01_BOJ_10994 {
static char[][] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int size = 4 * n - 3;
arr = new char[size][size];
// 배열을 공백으로 초기화
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
arr[i][j] = ' ';
}
}
// 재귀적으로 별을 찍음
drawStar(0, 0, size);
// 배열을 출력
printArray(size);
}
static void drawStar(int x, int y, int size) {
if (size < 1) return;
for (int i = 0; i < size; i++) {
arr[x + i][y] = '*'; // 왼쪽 라인
arr[x][y + i] = '*'; // 위쪽 라인
arr[x + size - 1][y + i] = '*'; // 아래쪽 라인
arr[x + i][y + size - 1] = '*'; // 오른쪽 라인
}
drawStar(x + 2, y + 2, size - 4);
}
// 배열 출력
static void printArray(int size) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
sb.append(arr[i]);
sb.append("\n");
}
System.out.print(sb.toString());
}
}
'알고리즘' 카테고리의 다른 글
[백준] : 1152번 - 단어의 개수 - JAVA (0) | 2024.11.15 |
---|---|
[백준] 26041번 : 비슷한 전화번호 표시 - JAVA (0) | 2024.11.15 |
[백준] 2675번 : 문자열 반복 - JAVA (1) | 2024.11.15 |
[백준] 9184번 : 신나는 함수 실행 - JAVA (0) | 2024.11.14 |
[백준] 25501번 : 재귀의 귀재 - JAVA (1) | 2024.11.14 |
[백준] 24416번 : 알고리즘 수업 피보나치 수 1 - JAVA (0) | 2024.11.14 |
[백준] 2167번 : 2차원 배열의 합 - JAVA (0) | 2024.11.13 |
[백준] 2018번 : 수들의 합 5 - JAVA (0) | 2024.11.13 |