
먼저 별 패턴을 출력하는 기본 구조를 만들어봤다.
public class StarPattern {
public static void main(String[] args) {
// 여기에 코드를 작성할 거야
}
}
이제 패턴을 만들기 시작했는데, 생각보다 훨씬 어려웠고 별의 개수와 공백을 계산하는 게 특히 까다로웠다.
사실 지금도 모르겠다. 검색의 힘이다.
public class StarPattern {
public static void main(String[] args) {
int rows = 7;
int spaces = 3;
// 상단 부분
for (int i = 1; i <= 4; i++) {
// 공백 출력
for (int j = 0; j < spaces; j++) {
System.out.print(" ");
}
// 별 출력
for (int k = 0; k < 2*i - 1; k++) {
System.out.print("*");
}
System.out.println();
spaces--;
}
// 여기서 하단 부분을 어떻게 해야 할지 헷갈렸어...
}
}
이 부분까지 왔을 때 정말 막막했다. 하단 부분을 어떻게 구현해야 할지 고민이 많았다. 어렸을 적 미술 시간에 배웠던 데칼코마니 기법이 생각이 나 상단 부분의 로직을 뒤집어서 적용해보기로 했다.
public class StarPattern {
public static void main(String[] args) {
int rows = 7;
int spaces = 3;
// 상단 부분
for (int i = 1; i <= 4; i++) {
// 공백 출력
for (int j = 0; j < spaces; j++) {
System.out.print(" ");
}
// 별 출력
for (int k = 0; k < 2*i - 1; k++) {
System.out.print("*");
}
System.out.println();
spaces--;
}
// 하단 부분
spaces = 1;
for (int i = 3; i >= 1; i--) {
// 공백 출력
for (int j = 0; j < spaces; j++) {
System.out.print(" ");
}
// 별 출력
for (int k = 0; k < 2*i - 1; k++) {
System.out.print("*");
}
System.out.println();
spaces++;
}
}
}
이걸 완성하고 나니까 정말 안도감이 들었다. 하지만 코드가 너무 복잡해 보여서 좀 불만족스러웠다. 반복되는 부분도 많고... 이걸 어떻게 개선해야 할지 고민이 됐다.
결국 메소드를 사용해서 코드를 정리해보기로 했다.
public class StarPattern {
public static void main(String[] args) {
int rows = 7;
printStarPattern(rows);
}
private static void printStarPattern(int rows) {
int spaces = rows / 2;
// 상단 부분
for (int i = 1; i <= rows/2 + 1; i++) {
printLine(spaces, 2*i - 1);
spaces--;
}
// 하단 부분
spaces = 1;
for (int i = rows/2; i >= 1; i--) {
printLine(spaces, 2*i - 1);
spaces++;
}
}
private static void printLine(int spaces, int stars) {
for (int i = 0; i < spaces; i++) {
System.out.print(" ");
}
for (int i = 0; i < stars; i++) {
System.out.print("*");
}
System.out.println();
}
}
이 과정이 생각보다 훨씬 어려웠다. 사실 검색의 힘이지 지금도 나 혼자서는 못할 것 같다. 처음에는 단순해 보였는데, 실제로 코드를 짜다 보니 여러 가지 고려해야 할 점들이 계속 나왔다. 특히 패턴의 대칭성을 활용하는 부분에서 많이 헤맸다. 그리고 코드를 깔끔하게 정리하는 과정도 쉽지 않았다. 하지만 결국 완성하고 나니 뿌듯하다. 프로그래밍이 항상 이렇게 도전적이고 보람찬 것 같다.
포기하지말고 늦었다고 생각하지말고 꾸준히 앞으로 나아가자.
속도보다 방향이 중요하니까.