이중for문 및 break,continue에 대한 이해를 위한 손코딩 [TIL 6일차]

JUNGHUN KIM·2021년 6월 18일
0
post-thumbnail

반복문에 대한 문제를 풀던도중 이중for문을 사용한 문제를 풀던 도중
이중 포문에 대한 이해도가 너무 없는 상태로 판단되어 계속 문제를 풀기보다는
간단한 이중 for문에 대한 모든 경우의수를 직접 손으로 적어보며 이해도를 높여보려고 함.

여태가지 (```js)라는 마크 다운을 잘 몰라
벨로그에 JS 코드를 적을때 가동적이 엄청나게 떨어지는 상태로 계속 블로그를 기재 하였는데..
어제 배운 마크다운 언어로 드디어 벨로그에 사람답게 코드를 적을수 있게됨
기존에 적은것은 수정하지 않고 냅두려고함.. 과거의 내가 반성 할수 있게..
그럼 헛소리는 그만하고 다시 반복문 공부를 해보자..

이중for문 only

문제1

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문의 실행문이 수행이 된 다음 증감식이 수행 되기는 프로세스 이기 때문에 조건문이 만족이 먼저 되어야 한다.

이중 for문 + break

break <= 루프를 완전히 끝내버림

문제1

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문도 끝나버림.

문제2

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

이중 for문 + continue

continue <== 지금것만 스킵하고 다음으로 넘어가는것.

문제1

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 <== 두번째 포문 조건문 성립안함.

문제2

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 <== 두번째 포문 조건문 성립안함.

profile
개발자가 되고 싶은 일문학도

0개의 댓글