예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
첫째 줄부터 차례대로 별을 출력한다.
3

사각형을 그릴 때, 윗줄 아랫줄 양옆을 순서대로 그려준다 생각하고, for문을 돌리면 됨.
(※ for문에서 i는 그려야하는 사각형(입력받은 숫자) 갯수를 의미하고, j는 line을 의미한다. i가 세로, j가 가로라고 오해하면 안 됨. j는 가로도 될 수 있고, 세로도 될 수 있음)
배열을 WH 크기로 하니까 헷갈려서 WH+1로 두었지만, WH로 계산해도 됨.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int number = Integer.parseInt(br.readLine());
int WH = 1;
for(int i=1; i<number; i++) {
WH += 4;
}
char[][] array = new char[WH+1][WH+1];
for (int i = 0; i <=WH; i++) {
Arrays.fill(array[i], ' ');
}
int Nbox = 1;
for(int i=1; i<=number; i++) {
for(int j=Nbox; j<=WH+1-Nbox; j++) {
array[Nbox][j] = '*';
array[WH+1-Nbox][j] = '*';
array[j][Nbox] = '*';
array[j][WH+1-Nbox] = '*';
}
Nbox += 2;
}
for(int i=1; i<=WH; i++) {
for(int j=1; j<=WH; j++) {
System.out.print(array[i][j]);
}
System.out.println();
}
}
}
100% 스스로 생각한 문제는 아니고, 2시간 가까이 한 줄 출력을 하다보니 이 방법은 정말 아닌 것 같다는 생각이 들어 찾아본 결과 재귀를 이용해서 많이들 풀더라. 하지만, 내가 후에도 이 문제를 풀게 될 때 생각날 것 같은 방식이 아니길래 다른 방법을 찾아보니 위/아래/옆을 그려주자라는 게 보여서 그 방법을 이용해봤다. 그 방식이랑 내 방식이 같은 건지는 모르겠지만, 잘 나온거 보니 이대로 풀이하는 게 맞는 것 같다.
이 부분부터는 완전 사족.
다음주쯤부터 JS로 풀이하려고 공부를 하고 있는데 아무래도 오래 풀이해본 자바보다는 활용하는 게 더딜 것 같다는 생각이 들어서 (JS는 심지어 레퍼런스도 많지 않으니) JS 풀이 초반에는 쉬운 문제로 풀어야겠다고 결정했다. 하지만, 다음달까지 골드를 목표로 하는데 브론즈 문제를 풀 수는 또 없고, 그렇다고 계속 실버5 문제를 풀자니... 느릿느릿될 것 같아서 자바로 푸는 동안은 실버4를 풀이해서 어느정도 예상속도를 맞춰가려고 함. 근데 첫 실버4부터 어려움.