본문 바로가기
language/C

for 중첩 반복문 별찍기 유형 정리

by sseddi 2020. 5. 14.
728x90

1. 반쪽 피라미드 (왼쪽 정렬)

*

**

***

****

*****

******

*******

 

 

코드)

 

큰 for문은 엔터를 치고, 작은 for문은 별을 찍는다.

엔터를 큰 for문 바로 밑에 적으면 엔터를 친 후에 별을 찍기 때문에 작은 for문 밑에 적어준다. 

 

큰 for문은 행을 나타낸다. 그러므로 엔터를 치고, 7줄이므로 7번을 반복하는 for문이다.

작은 for문은 열을 나타낸다. 그러므로 별을 찍는데, 별은 1개 2개 3개...7개 순으로 찍힌다. 

그래서 별을 몇 개 찍을지 미리 정해주는 것이 아니라 반복문을 통해 적어준다.(이후 100개 200개까지 찍을 경우 반복문을 쓰지 않으면 코드를 작성할 수 없음..)

그래서 반복문 안의 조건은 앞서 큰 for문에 사용했던 변수 i를 사용하는데 i와 작거나 같은 경우까지 증감하여 별을 찍는다.

엔터도 7줄이니까 7번찍으니 그에 맞춰서 별도 찍어주는 것이다. 

 

2. 반쪽 거꾸로 피라미드 (왼쪽 정렬)

*******

******

*****

****

***

**

*

 

 

코드)

 

1번과 비슷하지만 반전되었다는 것을 알 수 있다.

반쪽 피라미드가 반전되는 것은 1번은 별이 1개부터 시작하지만 이것은 별이 7개부터 시작한다는 차이점이 있다.

그래서 큰 for문에서 차이점이 있다. 별이 7개부터 1개까지 줄어드므로 감소 연산자를 사용해 적어준다. 

작은 for문은 같은데 그 이유는 어차피 별을 7개찍고 엔터를 해야하니까 i가 7이 될때 까지 j를 사용해 별을 7개 찍은 후에 엔터를 쳐주는 것이니까 같다. 

 

3. 반쪽 피라미드 (오른쪽 정렬)

힌트) 오른쪽 정렬 트리는 공백도 출력해야 한다.

 

      *

     **

    ***

   ****

  *****

 ******

*******

 

공백을 출력해야한다는 것의 의미를 생각해보면

별을 하나 찍는 맨 첫 번째 줄은 공백 6개에 별1개 밑으로 내려갈수록 공백5개 별2개 공백4개 별3개....

이렇게 공백의 수는 줄어들고, 별의 개수는 늘어나는 규칙이 있다는 것을 알 수 있다.

 

 

코드)

 

사실 혼자 하면서 별이 자꾸 대각선으로 찍히고 왜그러나 했더니 이 문제는 공백도 찍어내야 하므로 작은 for문을 두 개를 사용해야 했다. 별을 찍는 for문 하나와 공백을 찍는 for문 하나를 동등한 위치에서 큰 for문 안에 넣어주었다.

그 이유로는 사실 이 문제는 앞서 했던 반쪽 피라미드 두 개를 합친 것이라고 볼 수 있다.

공백은 2번, 별은 1번 피라미드라고 할 수 있다.

큰 for문은 행에 해당되어 7줄을 찍으니까 앞서 문제들과 다를 바 없이 7번을 반복하는 for문이다.

밑에 작은 for문이 문제인데,,

별을 찍는 것은 별이 늘어나면서 찍히므로 증감 연산자를 사용한다.  

 

 

코드)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

댓글