Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 재귀
- Mendix
- Recursion
- 프로그래머스
- 트리
- Sort
- 집합
- git
- algorithm
- 자료구조
- 멘딕스
- 정렬
- dfs
- 가중치없는그래프
- lcap
- MySQL
- 반효경교수님
- SQL
- Bruteforce
- 완전탐색
- microflow
- 해시맵
- 알고리즘
- 스택
- 백트래킹
- 자바
- domain model
- 그래프
- 이분탐색
- 매개변수 탐색
Archives
- Today
- Total
mondegreen
[240227] 알고리즘 리부트 18일차 - 백준 2447 자바 본문
반응형
개인적으로 재귀를 직관적으로 이해하는 게 많이 어려웠다. 그래서 재귀를 다시 익숙하게 만들기 위해서 그나마 정답률이 높은 이 문제를 선택했지만 고민을 해봐도 영 감이 잡히지 않아서 풀이를 참고해서 풀었다. 그나마 할 수 있는 건 풀이를 보고 따라치는 게 아니라 손으로 스택에 함수를 쌓아가며 다시 의사코드를 작성해보고 이를 다시 코드로 옮기면서 로직을 이해하려 노력했다.
여기서도 문제를 작게 나눠서 보는 것이 필요한데 n이 3일 때는 3*3의 배열을 가진 칸에 5번째 칸 즉, (1,1) 칸이 비어있어야 한다. n이 9인 경우에도 9*9의 배열이지만 각각의 3*3의 배열로 이루어져 있어서 5번째 3*3 즉, (3,3) 부터 우하향으로 (5,5)까지의 배열이 비어있어야 한다. 이걸 깨달은 사람은 천재들인가..라는 생각을 했지만 나도 천재될 수 있다는 생각으로!
3*3부터 접근해서 별 하나씩 그려야하기 때문에 주어진 n에서 부터 3씩 나누어가면 재귀 호출을 진행한다. n이 1일 때 비로소 그리기 시작하는데 count 가 5일 때, 즉, 5번째에 위치한 경우에는 해당하는 영역을 비워두어야 한다. 이를 위해 논리값 변수를 하나 두고, count 변수를 이용해 해당 재귀 함수 내에서 그리게 될 때마다 count를 올려줘야 한다. 코드를 까먹을 때 쯤에 다시 풀어야겠다.
import java.util.Scanner;
public class Main {
public static char[][] sky;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sky = new char[n][n];
drawStars(0, 0, n, false);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
sb.append(sky[i][j]);
}
sb.append("\n");
}
System.out.println(sb);
}
private static void drawStars(int x, int y, int n, boolean blank) {
if (blank) {
for (int i = x; i < x + n; i++) {
for (int j = y; j < y + n; j++) {
sky[i][j] = ' ';
}
}
return;
}
if (n == 1) {
sky[x][y] = '*';
return;
}
int newN = n / 3;
int count = 0;
for (int i = x; i < x + n; i += newN) {
for (int j = y; j < y + n; j += newN) {
count++;
if (count == 5) {
drawStars(i, j, newN, true);
} else {
drawStars(i, j, newN, false);
}
}
}
}
}
반응형
'알고리즘 풀이 및 리뷰 > 백준' 카테고리의 다른 글
[240310] 알고리즘 리부트 28일차 - 백준 2143 자바 (0) | 2024.03.11 |
---|---|
[240303] 알고리즘 리부트 23일차 - 백준 10836 자바 (0) | 2024.03.04 |
[240302] 알고리즘 리부트 22일차 - 백준 24479 자바 (0) | 2024.03.03 |
(BJ_2567) 색종이2 (0) | 2023.02.28 |
(BJ_1439) 뒤집기 (0) | 2023.02.19 |