JavaScript - 다중 for문, 자료구조, 스택 구조, 큐 구조

dev_swan·2022년 1월 10일
0

HTML-CSS-JS

목록 보기
9/19
post-thumbnail

다중 for문

정의 - for문안에 for문을 사용한것을 다중 for문이라고 한다.

예를 들어 구구단을 만들고 싶다면


이런식으로 for문안에 for문을 넣어 간단하게 구구단을 만들수 있다.

별찍기 예제

다른예로 다중 for문을 이용하여 알고리즘 기초문제로 자주 나오는 별찍기예제를 연습해 보았다.

  • 기본 별찍기
*
**
***
****
*****

let result = "";
for(let i=0; i < 5; i++){
for(let j=0; j <= i; j++){
result += "*"
}
result += "\n"
}
console.log(result)

우선 별을 5층으로 만들거니 for문으로 0~4까지 총 5행을 만들고 그안에 다중for문으로 j가 i와 같거나 작을시 *별을 하나 추가하도록 하고 j와i가 같아 지면, 이런 한 사이클이 끝나면 다음칸에 별을 찍도록 \n을 하였다.

  • 역삼각형 별찍기
*****
****
***
**
*

let result = "";
for(let i=5; i > 0; i--){
for(let j=0; j < i; j++){
result += "*"
}
result += "\n"
}

    console.log(result)
    

기본 별찍기와 마찬가지로 코드를 짜고 i값을 5로 하고 1씩 줄어들게하여 별이 5개 => 1개가 될때까지 반복하여 주었다.

  • 가운데 별찍기
    *
   ***
  *****
 *******
*********

let result = "";
for(let i=0; i < 5; i++){
for(let j = 4; j > i; j--){
result += ' ';
}
for(let k = 0; k <= (i2); k++){
result += "
";
}
result += "\n"
}
console.log(result)

우선 첫번째 for문으로 전과같이 5행까지 만들고 공백이 들어갈 두번째 for문을 만들어 첫번째 칸에는 공백이 4칸이 나오고 다음 세번째 for문으로 첫번째 칸에 별이 1개 나오게 된다,
이를 반복하면 다음 두번째 칸에는 공백이 3개 별이 2개 증가한 3개가 나오게 된다.
이런식으로 5행까지 반복하면 가운데 별찍기가 완성된다.

자료구조

정의 - 여러가지 데이터들의 묶음을 저장하고, 사용 방법을 정의한것이다.

자료구조를 배우면 좋은점

  • 데이터를 체계적으로 저장하고, 효율적으로 활용할 수 있다.
  • 대부분의 자료구조는 특정한 상황에 놓인 문제를 해결하는 데에 특화되어 있다, 다양한 자료구조를 알아놓으면 상황에 가장 적합한 자료구조를 활용하여 데이터를 정리하고 문제를 빠르게 해결할 수 있다.

스택(Stack) 구조

  • Last in First out
  • 데이터를 책처럼 쌓아올려 가장 마지막에 삽입된 데이터가 가장 먼저 삭제되는 자료구조이다.
  • 스택구조는 웹페이지 뒤로가기 , 실행취소 등 후입선출을 활용하여 여러 분야에서 활용 가능하다.
  • 스택에서 top으로 정한곳을 통해서만 접근할 수 있고 top을 통해 삽입하는 연산을 push, top을 통한 삭제하는 연산을 pop이라고 한다.
  • 비어있는 스택에서 원소를 추출하려고 할 때 stack underflow 라고 하고 스택이 넘치는 경우 stack overflow라고 한다.

    출처: https://devuna.tistory.com/22 [튜나 개발일기]

큐(Queue) 구조

  • First in First out
  • 큐 구조는 가장 먼저 삽입된 데이터가 가장 먼저 삭제되는 자료구조이다.
  • 큐 구조는 데이터가 입력된 시간 순차대로 처리하는 상황에 활용한다. (ex 은행업무, 프로세스 관리)
  • 큐 구조는 삭제연산만 수행되는 곳을 "front", 삽입연산만 이루어지는 곳을 "rear" 라고 한다.
  • 이때 rear에서 이루어지는 삽입연산을 인큐, front에서 이루어지는 삭제연산을 디큐라고 한다.

    출처: https://devuna.tistory.com/22 [튜나 개발일기]

재귀함수

정의 - 재귀함수는 함수안에 자신의 함수를 다시 호출하는것을 말한다.

사용 예시
1부터 100까지의 수를 더한것을 3가지 방법으로 표현해보았다.

  • for문 반복문

    let num = 0;
    for(let i=0; i < 101; i++){
    num += i
    }
    console.log(num)

  • 수학공식

    let n = 100;
    console.log(n*(n+1)/2)

1부터 100까지 더하는 값을 구하는 수학 공식이다.

  • 재귀함수

    function f(n){
    if( n <= 1 ){
    return 1;
    }
    return n + f( n-1 );
    }
    console.log( f( 100 ) )

if문을 사용하여 값이 음수까지 가게되면 데이터가 너무 커져 maximum call stack 에러가 나오기 때문에 종료 조건을 1이하로 지정해 두었다.
return n + f( n-1 ) 재귀함수를 사용하여 종료조건이 되기전까지의 100이하의 모든 숫자를 더하였다.

팩토리얼 (Factorial) 구하기

재귀함수를 설명할 때 자주 언급되는 팩토리얼을 코드로 구해보았다.
팩토리얼은 자기자신에서 1 감소한 숫자들을 모두 곱한 값이다. (ex 5 팩토리얼 = 5 * 4 * 3 * 2 * 1)

function fac(n){
if(n == 1){
return 1;
}
return n * fac(n - 1);
}
console.log(fac(5))

위와 마찬가지로 if문을 사용하여 종료조건을 정하여 무한반복되지 않게 설정하였다.
return n * fac(n-1); 재귀함수를 사용하여 종료조건이 되기전까지 5이하의 모든 숫자를 곱하였다.

0개의 댓글