본문 바로가기
혼공학습단 11기(完)

[혼공스] 04 - 2장 연습문제 풀이

by jaeheon0520 2024. 1. 15.

 

오늘은 04 - 2장의 연습문제를 풀이해 보자.

 

반복문부터는 구문도 늘어나고 형태도 복잡해지기 때문에 04 - 2장의 예제를 꼼꼼하게 정리하고 넘어가도록 하자.

 

그럼 정리 시작!

 

중첩 반복문을 사용하는 피라미드

 

누적예제 1. 반쪽짜리 피라미드 만들기

 

내가 작성한 코드

 

자바스크립트에서 * 연산자는 다른 언어처럼 문자를 반복하는데 사용하는게 아니라 곱셈에 사용된다. 그렇기 때문에 console.log('*' * i) 이런식으로 코드를 작성하면 NaN이라는 오류가 발생한다.

자바스크립트에서 반복되는 문자로 문자열을 생성하려면 'repeat()' 메소드를 사용할 수 있다.

다만, 이와 같은 풀이법은 console.log를 여러번 사용하기 때문에 한번에 출력되지 않고 여러번에 나눠서 출력된다. 경우에 따라 오답으로 처리될 수도 있으니 repeat() 메소드만 알아두고 넘어가도록 하자.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <script>
        for (let i = 1; i < 10; i++) {
            console.log('*'.repeat(i));
        }
    </script>
</head>
<body>
   
</body>
</html>

 

소개된 코드

 

빈 문자열에 문자를 이어붙여 문자열을 만든다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <script>
        let output = ''

        for (let i = 1; i < 10; i++) {
            for (let j = 0; j < i; j++) {
                output += '*'
            }
            output += '\n'
        }

        console.log(output)
    </script>
</head>
<body>
   
</body>
</html>

 

누적예제 2. 피라미드 만들기

 

내가 작성한 코드

 

누적예제 1과 같이 repeat() 메소드를 활용하여 풀이하였다. ' '(공백)이 출력되게 하기위해 console.log 안에 ' ' 과 '*' 를 문자열 연산자로 이어주었다. 마찬가지로 반쪽 자리 정답이다. repeat() 메소드만 알아두고 넘어가도록 하자.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <script>
        for (let i = 1; i < 15; i++) {
            console.log(' '.repeat(14 - i) + '*'.repeat(2 * i - 1));
        }
    </script>
</head>
<body>
   
</body>
</html>

 

소개된 코드

 

빈 문자열에 문자를 이어붙여 문자열을 만들고 문자열을 이어붙여 피라미드를 만드는 아이디어를 떠올리는게 핵심이다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <script>
        let output = ''

        for (let i = 1; i < 15; i++) {
            for (let j = 14; j > i; j--) {
                output += ' '
            }
            for (let k = 0; k < 2 * i - 1; k++) {
                output += '*'
            }
            output += '\n'
        }

        console.log(output)
    </script>
</head>
<body>
   
</body>
</html>

 

확인문제 3. 1부터 100까지의 숫자를 곱한 값을 계산하는 프로그램을 만들어보세요.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <script>
        let output = 1;
        for (let i = 1; i <= 100; i++) {
            output *= i
        }
        console.log(`1~100의 숫자를 모두 곱하면, ${output}입니다.`)
    </script>
</head>
<body>
   
</body>
</html>

 

확인문제 4. 활용 예제의 피라미드를 활용해서 다이아몬드 모양의 피라미드를 만들어보세요.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <script>
        let output = ''

        for (let i = 1; i <= 5; i++) {
            for (let j = i; j < 5; j++)
                output += ' '
            for (let j = 0; j < 2 * i - 1; j++)
                output += '*'
            output += '\n'
        }

        for (let i = 4; i > 0; i--) {
            for (let j = i; j < 5; j++)
                output += ' '
            for (let j = 0; j < 2 * i - 1; j++)
                output += '*'
            output += '\n'
        }
        console.log(output)
    </script>
</head>
<body>
   
</body>
</html>

 

실행결과

 

 

확인문제 4번은 교재의 코드와 내가 작성한 코드가 거의 똑같아서 딱히 정리할 내용은 없다. 중첩 반복문을 두 번 활용하는 것이 핵심이었다.

 

이상으로 04 - 2 장 연습문제 풀이를 마무리 하면 될 것 같다.

 

유명한 별찍기 문제를 몇 문제 풀어보았다. 간단한 유형만 풀어보았지만 덕분에 자바스크립트의 반복문에 조금더 익숙해 질 수 있었다.

 

내일은 3주차 미션을 해결해보자!

 

오늘 하루도 쌓였다.