티스토리 뷰

반응형

 

거의 다 썼는데 지워져서 다시 쓴다... 왜 저장이 안 되었을까요.

 

어젯밤 Array, for,  forEach 관련해 세 문제를 풀었다. 

1, 2 번은 결국에는 틀렸어도 근접은 했고, 왜 틀렸는지 알았을 때 깨달음이 한 번에 왔는데, 

3번은 이해하는데 시간이 조금 걸렸고, 특히 forEach를 이용한 것은 답지도없고 너무 어려워서 늦은 밤까지 이해하려고 애를 썼다. 

문법책을 보니 orEach를 이해하려면 콜백함수의 개념까지 이해해야 한다고 한다. 그래서 더 어려웠지만, 한 시간 넘게 그것만 바라보니까

적어도 이 문제를 완벽히 이해하는데는 성공했다. 

 

오늘은 세 문제를 15분만에 풀고 기분 좋은 아침을 맞이하는 중이다.

 

 

Q1 Array 안에서 철수를 찾아라.  ( find, indexOf 이런 함수들 사용 금지)

 

  // for, array 이용해서 이름찾기
        
        let 출석부 = ['흥민', '영희', '철수', '재석'];

        function 이름찾기(name){
            for(let i = 0; i < 4; i++){ 
                if ( name == 출석부[i]){
                    console.log('있어요.')
                }
            }
        }

 

코드대로 출석부안에 철수가 있으면 '있어요.'라고 출력이 되면 된다. 

내가 틀린 부분은 이름 찾기()에서 파라미터 안에 특정 이름을 넣지 않고 출력을 했다.. 껄껄..

 

 

 

Q2 구구단 출력하기 

 

// 구구단 콘솔창에 출력하기
        
        for ( let z = 2; z < 10; z++){
            console.log( z + '단');
            for ( let i = 1; i < 10; i++){
                console.log( z + '*' + i + '=' + (z * i) );
            }
        }

 

원래는 구구단 값만 나오게 하면되는건데 나는 보기 좋게 하고 싶어서 각각의 단과 식도 출력되게끔 했다. 

이 문제에서는 나는 반복문을 하나만 쓰고, i라는 변수 한 개로 풀려고 해서 틀렸다.. 아니 못 풀었지..ㅜ

아무튼 반복문 두개 쓰고 변수를 새로 지정해주면 되는구나!라는 깨달음을 얻었다. 

 

 

 

Q3 12월목표실적 구하기

 

한 회사의 세일즈 팀 각각의 12월 목표 실적을 구하는 문제였다. 

7월부터 11월까지의 실적(판매실적어레이)과 평균 월별 목표 판매량(평균 월별 판매량)을 입력하면

12월 목표 실적(실적 12월)이 얼만지 나오게 하면 된다.

- 이때 평균 월별 판매량은 7월부터 12월까지의 6개월로 계산한다. 

 

내가 접근한 방식은 이랬다. 

 

 

    1. 판매실적 어레이[i]를 써서 반복문을 써야 된다는 건 알겠는데..

 

    2. (실적 12월 + 실적 5개월 합)/6 = 평균 월별 판매량이런 식이 나오는데.. 우리는 12월 실적이 필요하니까

     실적 12월 = (6 * 평균 월별 판매량) - 실적 5개월 합 이렇게 되는 거겠지?

 

    3. 그럼 실적 5개월 합을 먼저 구해야겠네? 

        실적5개월 합 = 판매실적 어레이[1] + 판매실적 어레이[2] +... + 판매실적 어레이[5] ; 이거아님? 이거 반복문인데

        반복문 안에 판매실적 어레이[i] 넣으면 되겠군! 

        for ( let i = 0 ; i <  5; i++){

        실적 5개월 합 + 판매실적 어레이[i];

        }

 

       뭐지? 어떻게 해야 하지????????!!????!!!???!!??!!

 

 

내가 이 문제에서 생각하지 못한 점은 두 가지였다 

1.  실적5개월합이 0에서 시작한다는 것이다. 반복문을 쓰려면 이런 생각이 있어야 한다고 느꼈다. 

2.  +=라는 연산자를 이해하지 못했다. 

 

// 12월 평균실적 구하기 

        function 목표량계산기(판매실적어레이, 평균월별판매량){

            let 실적5개월합 = 0; 
            for (let i=0; i < 5; i++){
            실적5개월합 = 실적5개월합 + 판매실적어레이[i]
        }
            실적12월 = (6 * 평균월별판매량) - 실적5개월합;
            console.log(실적12월);
         };

 

그래서 답은 위와 같다. 또 실적 5개월 = 실적5개월 + 판매실적 어레이[i]의 공식은 

실적 5개월에 실적5개월 + 판매실적 어레이[i]를 대입해주세요라고 이해하면 된다.

 

이 공식은 +=라고 축약할 수 있다. ( 실적 5개월 += 판매실적 어레이[i] )

밑에서 그 공식을 써서 해보겠다. 

 

 

Q3 - 응용  - 그럼 forEach로는? 

 

// 응용 : forEach 사용하기

        function 목표량계산기(판매실적어레이, 평균월별판매량){
            let 실적5개월 = 0;
            판매실적어레이.forEach( item => {
                실적5개월 += item;
            })
            // item = 0부터 시작해서 0에 0 + 11을 해주세요.  > 오개월 실적 = 11
            // item = 1    //  11 에 11 + 6을 해주세요 > 오개월실적 = 17
            // item = 2    //  17 에 17 + 2 를 해주세요 > 오개월실적 = 19
            // item = 3    //  19 에 19 + 3 을 해주세요 > 오개월실적 = 22
            // item = 4    //  22 에 22 + 5 를 해주세요 > 오개월실적 = 27
            // 지금 오개월실적은 27인 상태가 됨.
                
            let 실적12월 = (6 * 평균월별판매량) - 실적5개월;
            console.log('12월에는 ' + 실적12월 + '개를 팔아야합니다.');
        };

 

이런 함수가 만들어진다.

오랜 시간 끝에 내가 이 식을 이해한 방법은 주석 부분과 같다. 하나하나 쓰니까 이해가 잘 되었다. 

 

최초 실적 5개월은 0에서 시작했지만 7월부터 11월까지의 달을 거쳐

최종 실적 5개월의 값은 반복문을 통해 27인 상태가 되는 것이다. 

 

item배열의 요소들을 부르는 말이다. 그러니까 for문에서 썼던 판매실적 어레이[i]가 forEach에서는 item인 것이다. 

또한 배열의 요소 개수에 따라 콜백 함수도 그 개수에 맞게 호출된다. 자신의 내부에서 반복문을 실시하기에 함수가 더 간단해진다. 

 

 

 

Reference : '애플 코딩'

 

 

반응형