https://www.acmicpc.net/problem/10992
- 문제
- 문제 풀이
백준 10992번 별 찍기 - 17은 브론즈 3 난이도의 구현 문제이다. 이 문제는 문제에서 주어진 것처럼 출력하면 되는 문제이다.
우선 예를 보겠다. n = 4일 때, 다음과 같은 패턴의 *들을 출력해주면 된다.
*
* *
* *
*******
맨 위에 줄을 편의상 level 0, 그리고 맨 밑에 있는 줄을 level n - 1이라고 부르겠다.
패턴을 보면 우선 첫째줄 가운데에 *이 1개가 있다. 그리고 그다음 줄부터 *이 2개씩 있고 마지막 줄에는 *이 2n - 1개가 있다는 것을 확인할 수 있다.
이 문제는 2차원 배열을 이용해서 풀었다. 만약에 다른 방법으로 풀었으면 댓글로 남겨주면 감사하겠다.
우선 사이즈가 [n - 1][2n - 1]인 배열을 초기화해준다. 우선 세로로 사이즈가 n - 1인 이유는 맨 밑줄을 제외하고 *들을 저장해주기 위함이다. 이 이유는 어차피 맨 밑줄에는 *이 공백 없이 2n - 1개가 있기 때문이다.
그리고 우선 int형 변수 L_index와 R_index를 선언해준다. 이 변수들은 배열에 *을 추가할 인덱스를 뜻한다. 우선 처음에는 L_index를 1, 그리고 R_index를 2n - 3으로 초기화해준다. 이 이유는 level n-2를 보면 인덱스 1과 인덱스 2n - 3에 *이 있기 때문이다. 따라서 arr [n - 2][L_index] = arr [n-2][R_index] = '*'로 해준다. 그리고 그 위에 줄에는 *이 1칸씩 가운데로 오기 때문에 L_index는 1씩 증가시켜주고 R_index는 1씩 감소시켜준다.
이 과정을 for-loop으로 진행해주면 맨 밑줄을 제외한 모든 줄에 맞는 위치에 *이 추가된다. 이것을 공백을 신경 써주면서 출력해주고 마지막 줄에는 *을 2n - 1개씩 출력해주면 된다.
자세한 코드는 밑에 있다.
- 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// n = 1이면 * 1개만 출력
if (n == 1) {
System.out.print("*");
return;
}
char[][] arr = new char[n-1][2*n-1]; // *을 저장할 배열
int L_index = 1;
int R_index = 2*n-3;
for (int i = n-2; i >= 0; i--) {
arr[i][L_index] = arr[i][R_index] = '*';
L_index++;
R_index--;
}
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= n-1; i++) {
sb.append(" ");
}
sb.append("*\n");
for (int i = 1; i <= n-2; i++) {
int count = 2;
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] == '*') {
sb.append("*");
count--;
if (count == 0) break;
} else {
sb.append(" ");
}
}
sb.append("\n");
}
for (int i = 1; i <= 2*n-1; i++) {
sb.append("*");
}
System.out.print(sb);
}
}
'백준' 카테고리의 다른 글
[백준] 5597번 : 과제 안 내신 분..? – JAVA [자바] (0) | 2022.08.06 |
---|---|
[백준] 10170번 : NFC West vs North – JAVA [자바] (0) | 2022.08.06 |
[백준] 5554번 : 심부름 가는 길 – JAVA [자바] (0) | 2022.08.06 |
[백준] 9654번 : 나부 함대 데이터 – JAVA [자바] (0) | 2022.08.05 |
[백준] 2501번 : 약수 구하기 – JAVA [자바] (0) | 2022.08.03 |
댓글