[JavaScript] 11. 반복문

Eden·2022년 9월 11일
0

Javascript

목록 보기
29/33
post-thumbnail

반복문

컴퓨터는 반복적인 작업을 하는 데 매우 효율적이다. 프로그래밍 언어는 반복하는 동작을 처리하는 반복문을 가지고 있다. 조건문과 더불어 프로그래밍에서 가장 중요한 반복문이다!

반복문 while

//while문의 기본형식
while (조건식)
	동작문;

while문은 조건식이 참인 동안 반복해서 동작문을 실행한다.

while (true) {
	console.log('Hello, World');
}

이렇게 하면 무한반복문이 되기 때문에.. 하지 말자!

무한 반복이 되지 않게 하기 위해 변수를 설정해주어야 한다.

Hello, while을 100번 출력하는 식을 만들어보자!

let i = 1;
while (i <= 100) {
	console.log('Hello, while!');
	i++;
}

>(100) Hello, while!
<100

변수 i를 선언하고 조건식을 i ≤ 100으로 둔다. 사람이 숫자를 세듯이 console.log할 때마다 1씩 숫자를 올리면 된다. i = i + 1을 해도 되지만 간단하게 i += 1이나 i++ 로 표현해준다. 언젠가 변수를 사용한 조건이 false가 되게끔 만들어 주는 …

실제로 프로그래밍 할 때는 변수에 첫 값으로 1을 넣기보다는 0을 많이 넣는다. 프로그래밍에서는 숫자를 0부터 세기 때문이다. 0부터 시작하는 경우는 i < 100으로 바꾸어 주어야한다.

let i = 0;
while (i < 100) {
	console.log('Hello, while!');
	i++;
}

동일하게 0~99까지 100번 실행된다.

반복문 for

//for문의 기본형식
for (1.시작(변수 선언); 2.조건식; 4.종료식)
	 3.동작문;

for문의 소괄호에는 세 가지 요소가 들어간다. 시작식과 변수선언과 조건식과 종료식이 들어간다.. 조건식과 동작문은 while문과 동일하다 1 - 2 - 3 - 4 - 2 - 3 - 4 - 2 - 3 - 4 ……….순으로 돌아간다.

for (let i = 0; i < 100; i++) {
	console.log('Hello, for!');
}

while문이 더 간단해보이지만, for문은 모아서 표현하고 있기에 가독성이 더 좋은 경우가 있다.

for문의 시작, 조건식, 종료식은 생략할 수 있다.

for(;;){

}
//그렇지만 무한반복돼서 강제종료 해야한다.

1부터 100까지 출력하기

//while문
let i = 0;
while(i < 100) {
	console.log(i + 1); //1부터 출력해야하기 때문에 i + 1해준다.. 잊지말자!
	i++;
}
//for문
for (let i= 0; i <100 ; i++) {
    console.log(i+1)
}

꼬옥 확인하고 넘어가도록하자!

반복문 멈추기

반복문 중간에 멈춰야하는 상황이 생길 수도 있다.

let i = 0;
while (true) {
	if (i === 5) break;
	i++;
}
console.log(i);

i === 5 가 되고, break 를 만나는 순간 반복문은 끝나버린다.

*무한 반복일 때 while문과 for문 중 어느 것을 고를까요?

바로 while문 입니다!

for문은 조건식이 생략되어 무한반복하기때문에 어색할 수 있다.. 그래서 무한 반복을 표현할 때는 while문을 더 많이 쓴다!

continue문으로 코드 실행 건너뛰기

가끔 반복문이 특정 조건에서만 실행되기를 원할 수도 있다. 이럴 때는 continue를 사용한다. continue문을 넣으면 이후 코드를 건너뛰게 된다.

let i = 0;
while (i < 10) {
	i++;
	if (i % 2 === 0) {   //짝수만
		continue;      //건너뛰어라!
	}
	console.log(i);
}

중첩된 반복문 사용하기

프로그래밍할 때 어려운 것 중 하나가 중첩된 반복문이다.. 반복문 안에 반복문이 들어 있는 경우인데, 이를 ‘반복문이 중첩됐다’고 한다.

for (let i = 0; i < 10; i++) {
	for (let j = 0; j < 10; j++) {
		console.log(i,j);
	}
}

//i == 0 j == 0 console.log(0,0);
//i == 0 j == 1 console.log(0,1);
//i == 0 j == 2 console.log(0,2);
//...
//i == 0 j == 10 조건x
//i == 1 j == 0 console.log(1,0)
//...
//i == 1 j == 9 console.log(1,9)
//i == 1 j == 10 조건x
//...
for (let i = 0; i < 5; i++) {
  if (i % 2 === 0) continue;
  for (let j = 0; j < 5; j++) {
    if (j % 2 === 0) continue;
    for (let k = 0; k < 5; k++) {
      if (k % 2 === 0) continue;
      console.log(i, j, k);
    }
  }
}

중첩 횟수가 증가할 수록 코드가 점점 어려워지게 된다… 실무에서는 대부분 이중 반복문이나 삼중 반복문 정도만 사용하기 때문에 지나치게 많이 중첩된 반복문은 사용할 일이 거의 없다..(다행)

*1분 퀴즈

구구단을 출력하되, 결과에 짝수가 하나도 나오지 않게 해보자. continue문을 사용하라

//i가 9까지 돌게하고 i가 2로 나눠 떨어지면 continue실행 j도 똑같이 실행. 그리고 i*j
for (let i = 0; i < 10; i++) {
  if (i % 2 === 0) continue;
  for (let j = 0; j < 10; j++) {
    if (j % 2 === 0) continue;
    console.log(i, '*', j, '=', i * j);
  }
}

//조건을 한 줄로
for(let i = 0; i < 10; i++) {
	for(let j = 0; j < 10; j++) {
		if (i % 2 === 0 || j % 2 === 0) continue;
		console.log(i, '*', j, '=', i * j);
	}
}

*숙제< 별 찍기 >

//별을 1, 2, 3, 4, 5 순으로 나타내기
for (let i = 0; i < 5; i++) {
  console.log("*".repeat(i + 1));
}

//별을 5, 4, 3, 2, 1 순으로 나타내기
for (let i = 5; i > 0; i--) {
  console.log("*".repeat(i));
}

//i가 0이 고정인상태로 1, 2, 3, 4, 5 순으로 나타내기
for (let i = 0; i < 5; i++) {
  console.log("*".repeat(5 - i));
}
//i = 0 1 2 3 4
//    5 4 3 2 1
//사이의 규칙을 찾아서 둘의 합이 5인 것을 알아냈다. 5 - i

//별의 갯수를 1, 3, 5, 7, 9 순으로
for (let i = 0; i < 10; i++) {
  if (i % 2 === 1) {
    console.log("*".repeat(i));
  }
}

//별의 갯수를 9, 7, 5, 3, 1 순으로
for (let i = 0; i < 10; i++) {
  if (i % 2 === 1) {
    console.log("*".repeat(10 - i));
  }
}

//별의 갯수를 1, 2, 3, 4, 5순으로, 하지만 오른쪽정렬
for (let i = 0; i < 5; i++) {
  console.log(" ".repeat(i), "*".repeat(5 - i));
}

//별의 갯수를 5, 4, 3, 2, 1순으로, 하지만 오른쪽정렬
for (let i = 0; i < 5; i++) {
  console.log(" ".repeat(5 - i), "*".repeat(i + 1));
}

//크리스마스 트리 만들기
for (let i = 0; i < 10; i++) {
  if (i % 2 === 1) {
    console.log(" ".repeat((10 - i) / 2), "*".repeat(i));
  }
}
profile
one part.

0개의 댓글