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에 별을 찍으면 됩니다.

  삼항 연산자로 해당 조건을 만족할때만 *을 출력하고 조건을 만족하지 않을시에

  공백을 출력하게 하면 됩니다.

 

 

 

 

오랜만에 다시 해보니 헷갈리네용.. ;)