본문 바로가기
Javascript, Typescript, React

Javascript - 반복문 (for문, while문)

by 케이리케리 2023. 1. 17.
for문
for(초기화부분; 조건부분; 추가동작부분){
    동작부분
}

for (let i = 1; i <= 10; i++) {
  console.log(`${i} 최고!`);
}

//for 반복문에서 추가동작부분을 꼭 채울 필요 없다. //i를 1씩 증가시키는 부분이 동작부분에 들어가도 문제 X
for (let i = 1; i <= 10;) {
  console.log(`${i} 최고!`);
  i++;
}

//초기화부분에서 생성한 변수는 for문의 로컬변수다.
for (let i = 1; i <= 10; i++) {
  console.log(`${i} 최고!`);
}

console.log(i); // Error !!

//초기화 부분도 반드시 채울 필요는 없다. 단,for문의 소괄호 안쪽 가장 첫번째 세미콜론은 생략할 수 없습니다.
//for문의 소괄호 안쪽은 반드시 세미콜론 2개가 필요하다.
let i = 1; 
for (; i <= 10; i++) {
  console.log(`${i} 최고!`);
}

 

실습 결과

높이: 1
*
높이: 3
*
**
***
높이: 5
*
**
***
****
*****

 

실습 작성 코드

function printTriangle(height) {
	let star = "";
	for(let i = 1; i <= height; i++){
	  star += "*";
	  console.log(star);
	}
}

// 테스트 코드
console.log('높이: 1');
printTriangle(1);

console.log('높이: 3');
printTriangle(3);

console.log('높이: 5');
printTriangle(5);

 

while문
while (조건부분) {
  동작부분;
}

//for문과 다르게 초기화부분이 없기때문에 전역변수(글로벌 변수)로 초기화부분을 작성해줘야함
let i = 1; 
while (i <= 10;) {
  console.log(`${i} 최고!`);
  i++; //while문의 소괄호 안에 추가동작부분이 없기때문에 동작부분 구문에서 추가동작부분을 작성해줘야함
}

//while은 언제 써야할까?
// ==> 전역변수를 조건 비교에 사용하고 반복문 내부에서도 다루면서 결과적으로 반복문이 종료된 다음에도 이 변수를 사용해야 될 때 

let i = 30; 
while (i % 7 !== 0;) {
  i++; 
}
console.log(i);

//for문은 보통 조건 비교에 사용되는 값을 반복문 내부에서만 사용하고 반복이 끝나면 외부에서 사용할 수 없음

 

실습

정수 N의 약수는 N을 나누었을 때 나누어떨어지는 수. 만약 정수 i가 정수 N의 약수라면, N을 i로 나누었을 때 나머지가 0이 나와야함.

while문을 활용해서 정수 180의 약수를 모두 출력하고, 총 몇 개의 약수가 있는지 출력하는 프로그램을 작성

 

실습 결과

1
2
3
4
5
6
9
10
12
15
18
20
30
36
45
60
90
180
180의 약수는 총 18개입니다.

 

실습 작성 코드

const N = 180;

let i = 1;
let count = 0;

while (i <= N) {
  if (N % i === 0) {
    console.log(i);
    count++;
  }
  i += 1;
}

console.log(`${N}의 약수는 총 ${count}개입니다.`);

 

구구단 만들기 실습 - 중첩 반복문 이용

실습 결과

1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
.
.
.
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

 

실습 작성 코드 - for문

for (let i = 1; i <= 9; i++) {
  for (let j = 1; j <= 9; j++) {
    console.log(`${i} * ${j} = ${i * j}`);
  }
}

실습 작성 코드 - while문

let i = 1;
while (i <= 9) {
  let j = 1;
  while (j <= 9) {
    console.log(`${i} * ${j} = ${i * j}`);
    j++;
  }
  i++;
}

 

피보나치 수열 만들기

실습 결과

1
1
2
3
5
8
13
21
.
.
.
4807526976
7778742049
12586269025

 

내가 작성한 코드

let current = 1;
let previous = 0;
console.log(current);

for(let i = 1; i < 50; i++){
  current = current + previous;
  console.log(current);
  previous = current - previous;
}

 

실습 코드

//for문
let current = 1;
let previous = 0;

for (let i = 1; i <= 50; i++) {
  console.log(current);
  let temp = previous;  // previous를 임시 보관소 temp에 저장
  previous = current;
  current = current + temp;  // temp에는 기존 previous 값이 저장돼 있음
}


//while문
let current = 1;
let previous = 0;
let i = 1;

while (i <= 50) {
  console.log(current);
  let temp = previous;  // previous를 임시 보관소 temp에 저장
  previous = current;
  current = current + temp;  // temp에는 기존 previous 값이 저장돼 있음
  i++;
}