반복문이란?
  • 반복문은 코딩에서 빼놓을 수 없는 필수적인 요소중에 하나이다. 반복문은 for 를 사용하여 실행코드들을 주어진 조건에 따라 여러번 반복시행할 수 있는 문법이다. 이러한 반복문의 활용으로 코드를 획기적으로 줄일 수 있고 또한 반복문을 잘못사용하면 무한루프 또는 프로그램의 오류로 이어질 수 있기때문에 반복문을 잘활용하는 것은 개발자로서 중요하다. 이제 반복문의 사용법에대해 알아보자.

 

 

반복문의 사용
  • 반복문은 for를 활용하여 초기식, 조건식, 증감식 을 설정하여 개발자가 원하는 만큼의 반복횟수를 설정할 수 있다. for문의 기본 양식은 아래와 같다.
for( 초기식; 조건식; 증감식;){
	실행코드;
}

//예시
for(let i = 0; i < 5; i++){
	console.log("Hello");
}

 

for문은 초기식, 조건식, 증감식을 사용한다. 초기식은 반복문이 실행될때 초기 한번만 실행되며 반복문의 시행횟수를 조절하는 변수에대한 정보가 있다. 조건식은 해당 조건문이 참일경우 반복문안에 있는 코드를 실행하게한다. 마지막으로 증감식은 반복될때마다 실행되며 변수에 변화를 준다.

 

for문의 실행구조

 

조건문의 진행구조에대해 설명하기위해 위의 그림을 첨부해봤다. for문이 처음실행되면 초기식이 실행된다(1). 이후 조건식을 체크하고 조건식이 참일경우 실행코드를 실행한다(2). 실행코드가 완료되면 증감식이 실행된다(3). 이후 다시 조건식을 확인하고 참일경우 다시 실행코드, 증감식 순으로 실행된다. 이후 반복을 계속하다가 조건식이 거짓일경우 실행코드를 실행하지 않고 for문을 빠져나오게된다(5). 

 

이를 인지하고 맨위의 예제코드에서 사용된 for문을 보면 for(let i = 0; i  < 5; i++) 라고 적혀있다. 이를 해석하면 for( i = 0 변수 선언; i 가 5보다 작을때까지 반복; 반복후에 i = i+1(i에 1을 더함);) 이된다. 

 

 

 

이중 for문
  • 이중 for문은 for문 안에 for문을 넣는것이다. 사실 for문안에는 개발자가 원하는 만큼의 for문을 넣을 수 있지만 for문은 중첩되면 중첩될수록 반복횟수가 기하급수적으로 많아진다는점에 있어서 프로그램의 최적화에 문제가 될 수 있다. for문을 중첩해서 사용할때의 주의점은 초기식에서 사용하는 변수가 겹치면 안되다는 것이다. 변수의 선언은 자유지만 보통 i,j,k 를 많이 사용한다.
for(초기식; 증감식; 조건식){
	for(초기식;증감식;조건식){
    	실행코드;
    }
}


// 코드 예시
for(let i = 0; i < 5; i++){
	for(let j = 0; j < i; j++){
    	console.log("i값: " + i + " j 값: " + j);
    }
}

//실행 결과
i값: 1 j 값: 0
i값: 2 j 값: 0
i값: 2 j 값: 1
i값: 3 j 값: 0
i값: 3 j 값: 1
i값: 3 j 값: 2
i값: 4 j 값: 0
i값: 4 j 값: 1
i값: 4 j 값: 2
i값: 4 j 값: 3

 

위 예제코드에선 이중for문의 실행순서를 이해하기 쉽도록 코드가 실행될때의 i값과 j값을 출력하도록 했다. 이러한 이중for문은 이중배열을 다룰때 많이 사용된다. 

 

 

 

 

배열과 for문
  • 배열과 for문은 떼어놓기 어려운 단짝이다. for문을 사용하면 배열을 관리하기 쉬워진다.
let score = [90,80,70,60];

for(let i = 0; i < score.length; i++){
	console.log(score[i]);
}

//실행결과
90
80
70
60

 

for문을 반복문과 함께 사용할때는 보통 조건식에 특정한 숫자보다는 배열의 길이를 나타내는 .length 를 사용하는 경우가 많다. 이는 배열에 사용자에게 입력받은 값이 들어가 있을경우 배열의 길이를 특정짓기 힘들고 배열의 길이보다 더 혹은 덜 반복시행될경우 데이터 오류로 이어질 수 있기 때문이다. 위 코드는 그저 배열안에 있는 정보를 출력한것이고 이를 좀더 응용해보면 배열안에 객체를 저장하고 if문을 통해 배열안에 특정 값만 출력해낼 수 있다. 예제는 아래와 같다.

 

let student = [
	{name:"철수", score:80},
	{name:"영희", score:70},
	{name:"맹구", score:60},
	{name:"짱구", score:90}
];

for(let i = 0; i < student.length; i++){
	if(student[i].score >= 80){
		console.log(student[i].name);
	}
}

//실행결과
철수
짱구

 

위 코드에선 student 배열안에 여러개의 객체를 저장했다. 그리고 for문을 통해 배열을 가져오고 조건문을 통해 객체안에 score의 값이 80이상일경우 해당 객체의 name값을 출력하는 코드를 작성했다. 이런식으로 for문을 활용하여 배열안에 원하는 데이터를 추출할 수 있다. 이제 다양한 문제를 통해 for문을 익혀보자. 

 

 

 

 

 

 

" * " 로 그림 그리기(문제)
  • 1번: for문을 활용하여 아래의 그림을 완성해보시오. process.stdout.write(); 을 활용하면 줄바꿈없이 console 출력이 가능하다.
     

 

 

 

  • 2번: for문을 활용하여 아래의 그림을 완성해보시오.(삼각형 상하반전)

 

 

 

 

  • 3번: for문을 활용하여 아래의 그림을 완성해보시오.(삼각형 좌우반전)

 

 

 

  • 4번:for문을 활용하여 아래의 그림을 완성해보시오.(정삼각형 모형)

 

 

  • 5번:for문을 활용하여 아래의 그림을 완성해보시오.(마름모)

 

 

 

 

 

 

" * "로 그림 그리기(예제코드)
  • 먼저 코딩에있어 정답은 없다. 같은 결과여도 다양한 코드가 존재한다. 아래 코드들은 필자가 부족한 지식으로 작성해본 코드들이다. 이 점 유의하길 바라고 코드를 읽고 이해하는것이 중요하다. 반대로 아래 코드를 보고 어떤 형상의 그림이 나올지 유추해보는것도 큰 도움이 될것이다. 

 

  • 1번문제
for(let i = 0; i < 10; i++){
	for(let j = 0; j < i; j++){
		process.stdout.write("*");
	}
	console.log("");
}

 

 

 

  • 2번 문제
for(let i = 10; i > 0; i--){
	for(let j = i; j > 0; j--){
		process.stdout.write("*");
	}
	console.log("");
}

 

 

 

 

  • 3번 문제
for(let i = 10; i > 0; i--){
	for(let j = i; j > 0; j--){
		process.stdout.write(" ");
	}
	for(let k = 10 - i; k > 0; k--){
		process.stdout.write("*");
	}
	console.log("");
}

 

 

  • 4번 문제
for(let i = 0; i < 10; i++){
	for(let j = 10; j > i; j--){
		process.stdout.write(" ");
	}

	for(let j = 0; j < i-1; j++){
		process.stdout.write("*");
	}

	for(let j = 0; j < i; j++){
		process.stdout.write("*");
	}

	console.log();
}

 

 

  • 5번문제
for(let i = 0; i < 10; i++){
	for(let j = 10; j > i; j--){
		process.stdout.write(" ");
	}

	for(let j = 0; j < i-1; j++){
		process.stdout.write("*");
	}

	for(let j = 0; j < i; j++){
		process.stdout.write("*");
	}

	console.log();
}
for(let i = 0; i < 9; i++){
	for(let j = 0; j-1 <= i; j++){
		process.stdout.write(" ");
	}
	for(let j = 8; j > i; j--){
		process.stdout.write("*");
	}
	for(let j = 7; j > i; j--){
		process.stdout.write("*");
	}
	console.log();
}

+ Recent posts