반응형
https://www.acmicpc.net/problem/10991
- 문제
- 문제 풀이
백준 10991번 별 찍기 - 16은 브론즈 3 난이도의 구현 문제이다. 이 문제는 별 찍기 문제이다. 이런 유형의 문제들은 패턴을 찾는 게 중요하다.
예를 보면서 패턴을 찾아보겠다.
*
* *
* * *
* * * *
이런 유형의 별 패턴이다. 우선, 맨 윗줄 가운데에 *이 있다. 그리고 윗줄에 *이 있으면 아랫줄 왼쪽과 오른쪽도 *이 위치한다.
따라서 이 문제는 2차원 배열을 이용해서 풀었다. 우선 char형 배열 arr을 [n][2n - 1]의 크기로 선언해준다. 그리고 첫 줄 가운데에 *이 위치하므로, arr [0][n-1] = *로 초기화해준다.
그리고 for-loop을 돌려 윗줄에 *이 있으면 아래줄 왼쪽과 오른쪽에도 *을 넣어준다. 그리고 마지막에 출력만 해주면 된다.
자세한 코드는 밑에 있는 코드를 참고하면 되겠다.
- 코드
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());
char[][] arr = new char[n][2*n-1];
StringBuilder sb = new StringBuilder();
arr[0][n-1] = '*'; //첫 줄 별은 중간에 위치한다
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < arr[i].length-1; j++) {
//윗줄에 *이 있으면 아래줄 왼쪽과 오른쪽도 *이다
if (arr[i][j] == '*') {
arr[i+1][j-1] = '*';
arr[i+1][j+1] = '*';
}
}
}
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] == '*') {
sb.append("*");
count++;
} else {
sb.append(" ");
}
if (count == i+1) break;
}
if (i == n-1) break;
sb.append("\n");
}
System.out.print(sb);
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 3003번 : 킹, 퀸, 룩, 비숍, 나이트, 폰 – JAVA [자바] (0) | 2022.08.02 |
---|---|
[백준] 1271번 : 엄청난 부자2 – JAVA [자바] (0) | 2022.08.02 |
[백준] 2953번 : 나는 요리사다 – JAVA [자바] (0) | 2022.08.01 |
[백준] 5339번 : 콜센터 – JAVA [자바] (0) | 2022.08.01 |
[백준] 5337번 : 웰컴 – JAVA [자바] (0) | 2022.08.01 |
댓글