코테/백준
[백준/JAVA] 10994번: 별 찍기 - 19
imname1am
2024. 1. 13. 00:49
반응형
📖 문제
10994번: 별 찍기 - 19
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
www.acmicpc.net
💡 풀이 방식
• 재귀
. 재귀함수의 인자로는 (시작 행 위치, 가로줄 길이)를 가져간다.
. 반복문을 통해 시작 위치부터 가로줄 길이까지 사각형 위치에 있는 칸을 별로 채운다. (맨 위 가로줄, 맨 아래 가로줄, 왼쪽 세로줄, 오른쪽 세로줄)
. 반복문이 끝나면, 시작하는 행의 위치는 2 더하고, 가로줄의 길이는 2씩 줄여 재귀함수를 돌린다. (그래야 안쪽에 줄어든 길이만큼 별을 생성할 수 있다.)
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import java.util.*;
import java.io.*;
public class Main {
static int N;
static char[][] star;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
N = 4 * N - 3; // 등차수열로 구함
star = new char[N][N];
for(int i = 0 ; i < N ; i++) {
for(int j = 0 ; j < N ; j++) {
star[i][j] = ' ';
}
}
makeStar(0, N); // 별 찍기
// 출력하기
StringBuilder sb = new StringBuilder();
for(char[] ch : star) {
for(char c : ch) {
sb.append(c);
}
sb.append("\n");
}
System.out.println(sb);
}
// 사각형 모양대로 별 찍는 메소드
private static void makeStar(int s, int len) {
if(len <= s) return;
for(int i = s ; i < len ; i++) {
star[s][i] = '*'; // 맨 위 가로줄
star[len - 1][i] = '*'; // 맨 아래 가로줄
star[i][s] = '*'; // 왼쪽 세로줄
star[i][len - 1] = '*'; // 오른쪽 세로줄
}
makeStar(s + 2, len - 2); // 재귀
}
}
|
cs |
💦 어려웠던 점
한 행씩 연달아 가며 별 채울 생각했는데 그것이 아니었다,,
규칙을 찾고 잘 하자,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 240620 |
(참고)
별 찍기-19 Java
https://www.acmicpc.net/problem/10994 10994번: 별 찍기 - 19 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. www.acmicpc.net 먼저 n이 무엇과 관련이 있을까 생각해보면 각 별이 출력되는 line과 관련 됨을 알
byeongyeon.tistory.com
반응형