Java
별찍기 java 예제 (for문 예제)
dev_zephyr
2021. 1. 27. 16:27
저도 처음 했을 당시 머리 싸매며 풀었던 기억이 나네요.
가장 중요한것은 이중 for문에 대한 이해이고,
응용된 다른 모양의 별찍기를 하려면 i와 j의 상관관계(좌표)를 캐치하는것 이라고 생각합니다.
// MAX에 정사각형 크기 입력
for(int i=0; i<MAX; i++) {
for(int j=0; j<MAX; j++) {
if(j > i) break;
System.out.print("*");
}
System.out.println();
}
- 각 row를 반복하는 구역은 i, 각 column을 반복하는 구역은 j
- 별 출력하는 곳은 println()이 아닌 print()에 주의
// MAX에 정사각형 크기 입력
for(int i=0; i<MAX; i++) {
for(int j=MAX-i; j>0; j--) {
System.out.print("*");
}
System.out.println();
}
- j열의 조건이 다르고 증감식이 --로 가는점 외에는 비슷합니다.
for(int i=0; i<MAX; i++) {
if(i == 0 || MAX-i == 1) { // 첫번째행, 마지막행일때
for(int j=0; j<MAX; j++) {
System.out.print("*");
}
} else {
for(int j=0; j<MAX; j++) {
System.out.print(j == i || j == 0 || j == MAX-1 ? "*" : " ");
}
}
System.out.println();
}
- 첫번째 row와 마지막 row, 그것을 제외한 나머지 row로 나누어서 생각합니다.
- 가운데 별의 좌표를 먼저 파악해야 합니다.
- 그림처럼 별이 찍히는 좌표는
i가 1일때 && j가 1일때, i가 2일때 && j가 2일때............
결국 i == j 일때 별을 찍고, 처음 column과 마지막 column에 별을 찍으면 됩니다.
삼항 연산자로 해당 조건을 만족할때만 *을 출력하고 조건을 만족하지 않을시에
공백을 출력하게 하면 됩니다.
오랜만에 다시 해보니 헷갈리네용.. ;)