반복문에 대한 문제를 풀던도중 이중for문을 사용한 문제를 풀던 도중
이중 포문에 대한 이해도가 너무 없는 상태로 판단되어 계속 문제를 풀기보다는
간단한 이중 for문에 대한 모든 경우의수를 직접 손으로 적어보며 이해도를 높여보려고 함.
여태가지 (```js)라는 마크 다운을 잘 몰라
벨로그에 JS 코드를 적을때 가동적이 엄청나게 떨어지는 상태로 계속 블로그를 기재 하였는데..
어제 배운 마크다운 언어로 드디어 벨로그에 사람답게 코드를 적을수 있게됨
기존에 적은것은 수정하지 않고 냅두려고함.. 과거의 내가 반성 할수 있게..
그럼 헛소리는 그만하고 다시 반복문 공부를 해보자..
for (let i = 0; i<3 ; i++) {
for (let j =0 ; j<=i; j++) {
console.log(`i:${i}, j:${j}이다`)
}
}
결과
i:0, j:0이다
i:1, j:0이다
i:1, j:1이다
i:2, j:0이다
i:2, j:1이다
i:2, j:2이다
모든 과정을 정리
i=0 , j=0 <== i:0, j:0이 출력
i=0 , j=1 <== 두번째 for문의 j<=i가 성립하지 않으므로 두번째 for문 종료
그 이후 i=1가 된다.
i=1 , j=0 <== i:1, j=0이 출력
i=1 , j=1 <== i:1, j=1이 출력
i=1 , j=2 <== 두번째 for문의 j<=i가 성립되지 않으므로 두번째 포문 종료.
그 이후 i=2가 된다.
i=2 , j=0 <== i:2, j=0이 출력
i=2 , j=1 <== i:2, j=1이 출력
i=2 , j=2 <== i:2, j=2이 출력
i=2 , j=3 <== 두번째 for문의 j<=i가 성립되지 않으므로 두번째 포문 종료.
그 이후 i=3이 되며 첫번째 for문의 i<3가 만족하지 못하므로 첫번째 for문또한 종료되고 끝.
여기서 고민1. i=0 j=1이 성립하지 않으면 어떻게 될까?
case1. i=0, j=2가 되어 계속 두번째 for문을 무한으로 비교를 할까..?
case2 i=1 ,j=0이 되어 첫번째 포문부터 다시 시작하게 되는것 일까..?
답은 case2 이유는 두번째 포문의 조건인 for문의 증감식 같은경우는 조건문이 참이 된 다음 for문의 실행문이 수행이 된 다음 증감식이 수행 되기는 프로세스 이기 때문에 조건문이 만족이 먼저 되어야 한다.
break <= 루프를 완전히 끝내버림
for (let i = 0; i<3 ; i++) {
for (let j =0 ; j<=i; j++) {
if(j % 2 === 1){
break
} else {
console.log(`i:${i}, j:${j}이다`) }
}
}
결과
i:0, j:0이다
i:1, j:0이다
i:2, j:0이다
i= 0 , j=0 <= j % 2 ===1 이 성립하지 않으므로 콘솔 값 출력
i= 1 , j=0 <= j % 2 === 1 이 성립하지 않으므로 콘솔 값 출력
i= 1 , j=1 <= j % 2 ===1 이 성립하므로 break
j=1에서 j++이 되어 j=2가 되지 않음. 바로 위에서 break가 되면서 그대로 두번째 for문이 끝나버리기 때문.
i= 2 , j=0 <=j % 2 === 1 이 성립하지 않으므로 콘솔 값 출력
i= 2 , j=1 <=j % 2 ===1 이 성립하므로 break
그리고 break로 i=2의 경우의 두번째 for문도 끝나버림.
for (let i = 0; i<3 ; i++) {
for (let j =0 ; j<=i; j++) {
if(j % 2 === 0){
break
} else {
console.log(`i:${i}, j:${j}이다`) }
}
}
결과
undefinecd
i= 0, j=0 <= j % === 0 이 만족하므로 break
i= 1, j=0 <= j % === 0 이 만족하므로 break
i= 2, j=0 <= j % === 0 이 만족하므로 break
continue <== 지금것만 스킵하고 다음으로 넘어가는것.
for (let i = 0; i<3 ; i++) {
for (let j =0 ; j<=i; j++) {
if(j % 2 === 1){
continue
} else {
console.log(`i:${i}, j:${j}이다`) }
}
}
결과
i:0, j:0이다
i:1, j:0이다
i:2, j:0이다
i:2, j:2이다
i=0 , j=0 <== 콘솔 로그 출력
i=0 , j=1 <== 두번째 포문 조건문 성립안함.
i=1 , j=0 <= 콘솔 로그 출력
i=1 , j=1 <= if(j % 2 === 1)에 걸리므로 continue처리하여 스킵해버림=콘솔로그 수행X
i=1 , j=2 <= 두번째 포문 조건문 성립안함.
i=2 , j=0 <== 콘솔 로그 출력
i=2 , j=1 <== if(j % 2 === 1)에 걸리므로 continue처리하여 스킵해버림=콘솔로그 수행X
i=2 , j=2 <== 콘솔 로그 출력
i=2 , j=3 <== 두번째 포문 조건문 성립안함.
for (let i = 0; i<3 ; i++) {
for (let j =0 ; j<=i; j++) {
if(j % 2 === 0){
continue
} else {
console.log(`i:${i}, j:${j}이다`) }
}
}
결과
i:1, j:1이다
i:2, j:1이다
i=0 , j=0 <== if(j % 2 === 0)에 걸리므로 continue처리하여 스킵해버림=콘솔로그 수행X
i=0 , j=1 <== 두번째 포문 조건문 성립안함.
i=1 , j=0 <== if(j % 2 === 0)에 걸리므로 continue처리하여 스킵해버림=콘솔로그 수행X
i=1 , j=1 <== 콘솔 로그 출력
i=1 , j=2 <= 두번째 포문 조건문 성립안함.
i=2 , j=0 <== if(j % 2 === 0)에 걸리므로 continue처리하여 스킵해버림=콘솔로그 수행X
i=2 , j=1 <== 콘솔 로그 출력
i=2 , j=2 <== if(j % 2 === 0)에 걸리므로 continue처리하여 스킵해버림=콘솔로그 수행X
i=2 , j=3 <== 두번째 포문 조건문 성립안함.