중첩 반복문2(피라미드 만들기)

javascript 2015. 3. 23. 23:34

728x90
반응형

중첩 반복문 중 피라미드 만들기 예제를 해보자

이걸 이해 한다면 for문을 정말 완벽하게 이해 한다고 생각해도 될꺼 같다.

하지만 실무에서 이렇게 꼬아서 for문을 사용하는 경우는 없을꺼 같다.


계단 만들기를 응용한 예제이다.

내가 생각하기엔 어렵다. 물론 필자의 실력이 그렇게 좋은편은 아니기에 할만하다 라고 말 못하는것도 당연하다.

코드를 분석해 보자면 이렇다.

for문 안에 for문이 두개 들어간다.

for(var i = 0; i < 15; i++){

for(){

}

for(){

}

}


첫번째로 중첩되는 for문의 경우엔

띄어쓰기가 들어가야 하고


두번째로 중첩된 for문의 경우엔 * 이 들어가야 한다.

첫번째 부터 해보자.

첫번째 중첩 포문의 경우엔 '역 for 반복문' 을 이용하여야 한다.

여태까지 1부터 나오는걸 해왔다면 이번엔 반대로 15만큼이라면 15만큼 넣는거서부터 출발하는거라 볼수 있다.

만약. j 라는 변수의 값이 15 이고 j 가 i 보다 크다면 안의 실행문이 돌아가고 하나씩 값이 줄어드는 종결식을 만나야 한다.

식을 쓰자면

for(var i = 0; i < 15; i++){

for(var j = 15; j > i; j--){

output += ' ';

}

for(){

}

}


이렇게 식을 써주면 하나씩 해석을 해보자.

i 가 0 이고 i 가 15보다 작을경우는 참이된다. 그래서 0 이 들어가 있는 i 는 아래로 내려가서 실행문을 만나게 되는데

첫번째 중첩 반복문을 먼저 만나게 되어 있다. 위에서 아래로 읽으니까...

여기서 또 j 라는 변수에 15 라는 값을 할당시킨다. j 는 고로 15 이다.

현재 j 가 0 이라는 값을 가지고 내려온 i 보다 값이 큰가? 이건 확실히 맞다.

아래 실행문을 만나고 종결식을 만나 15 에서 1를 뺀값인 14가 된다.

14인 j는 아직도 0인 i 값보다 여전히 크다. 

여전히 그 안의 실행문은 돌아가고 이제 output에 띄어쓰기가 두개가 만들어 졌다.

이런식으로 쭉쭉 돌아가다가 j 가 0이 되고 0 의 값을 가지고 있는 i를 만나면 for문을 종료시키는거다.

그리고 띄어쓰기가 잔뜩 들어간 output 이 있는거라 볼수 있다.

하지만 현재 변수엔 띄어쓰기만 있지 *은 없다.

두번째 반복문이 남아있는데 이걸 해결해야한다.

이번껀 기존에 있는 방식으로 하면 반이 뚝 짤린 피라미드를 보게 될 것이다.


이걸 해결 하려면

두번째 줄부턴 *이 홀수로 들어가야 피라미드가 된다는걸 볼수 있다.

i 에 * 2 를 하면 두번째 줄부턴 별이 4개가 되겠지. 하지만 별은 항상 홀수계로 들어가야 하니 -1 을 하면???


for(var i = 0; i < 15; i++){

for(var j = 15; j > i; j--){

output += ' ';

}

for(var k = 0; k < i * 2 - 1; k++){

output += '*';

}

output += '\n';

}


이렇게 된다면 반드시 홀수의 *이 찍힐 것이다.

처음에 0 으로 내려온 i 는 k 와 같기 때문에 두번째 반복문은 바로 캔슬 되겠지만.

조건이 참이였던 i 는 아웃풋이란 변수에 뭔가를 찍고 종결식을 만나 1 이 되겠다.


움.. 필자가 필력이 후달려서 더이상 자세한 설명이 불가능 한듯;

여튼 이건 공책에 연필로 그려가면서 이해하면 확실히 더 빨리 이해할 수 있다.

반응형

'javascript' 카테고리의 다른 글

비유효 매개변수  (0) 2015.03.24
익명함수와 선언적함수의 차이  (0) 2015.03.24
중첩 반복문 예제1(계단 만들기)  (5) 2015.03.22
if 조건문 예제.  (2) 2015.03.22
if조건문  (0) 2015.03.08