알고리즘

8월 4주차 알고리즘 스터디 설명

비루블 2022. 9. 4. 13:36

https://codeup.kr/problem.php?id=1370 

 

지그재그 출력하기

높이 h와 반복휫수 r이 주어질때, 별을 다음과 같이 지그재그로 출력하자. 예) 3 2 * * * * * * * * * *

codeup.kr

원리 설명

설명

해당 문제는 공백에 초점을 둬야하는 문제

전체적인 해석 필요

1. allcount 전체 반복횟수로 쪼개기

2. 상단 공백 증가와 하단 공백 감소로 쪼개기

 

3으로 예시 높이3, 반복3

반복3을 쪼갬(for문)

 

별은 위에 3개(공백 증가), 아래 2개(공백 감소) 출력

별 3개인 공백증가는 공백이 0개 -> 1개 -> 2개 순으로 증가(for문)

별 2개인 공백감소는 공백이 1개 -> 0개 순으로 감소(for문)

여기서 for문 쓰는 방법이 중요

공백 증가는 어찌저찌 만들 수 있을 것임.

공백 감소는 어떻게 하는가?

 

쉽게 설명을 위해 공백은 o으로 설명

지금 형태를 보면

*

o*

oo*

-------

o*

*

공백이 먼저 만들어지고 별을 찍기 때문에

전체 반복(for)안에서 for(별찍기)안에서 for(공백만들기)를 먼저 해야함.

그렇다면, 형태의 하단을 보면 현재 o(공백)이 하나인 것을 알 수 있음.

 

 

하단 공백은 1개 -> 0개 순으로 감소 됨.

그렇다면, 하단 공백은 별높이의 -2부터 시작하면 되는 것.

위의 말을 이행하려면, 공백 반복문이 먼저 회전을 해서 1개 -> 0개 순으로 만들어야함.

 

ex) 이부분을 예시로 만약에 높이가 4라면?(하단)

oo*

o*

*

 

하단 부분의 공백은 2개 -> 1개 -> 0개가 되어야한다.

그렇다는 말은 공백의 반복문이 2번 먼저 돌고, 별찍고, 1번 돌고 별찍고, 바로 별찍기 순이 된다.

위 설명은 공백이 먼저 여러번 실행되어 만들어져야 한다는 말이다.

 

 

그래서 하단의 별찍기 for문은 j인덱스의 값이

2->1->0 순으로 가던 0->1->2 순으로 가던 별을 하나 찍는 것은 같기 때문에

변수j를 별의높이-2로 선언해주었으며, j--를 이용하여 j가 줄어들게 만들었음.

공백은 먼저 2번 돌아가게끔 조건을 <j로 주었음.

(목적 : j가 큰숫자에서 점점 줄어들게 만들어 공백을 점점 줄임)

 

스터디원에게 사진 설명

별높이3 반복획수3  예시

 

 

 

 

----------------------------------------------------------

 

별높이 4, 반복획수 3 설명