티스토리 뷰
[Javascript] Array, for, forEach 이용해 문제풀기 (출석부, 구구단, 12월실적 구하기)
AlgoRoot 2022. 1. 18. 00:25
거의 다 썼는데 지워져서 다시 쓴다... 왜 저장이 안 되었을까요.
어젯밤 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 : '애플 코딩'
'Frontend > JavaScript' 카테고리의 다른 글
[자바스크립트 비동기 처리] 비동기 처리의 시작 - 콜백지옥 체험 (0) | 2022.04.11 |
---|---|
[JavaScript] class와 callback 이해하기 (0) | 2022.02.02 |
[Javascript] jQuery 'append()'를 순수 자바스크립트로 작성해보자 -jQuery append() in Pure Javascript (1) | 2022.01.17 |
[Javascript] 모던 자바스크립트 deep dive 책을 구매하다. (1) | 2022.01.16 |
[Javascript] 369 게임 , 배수를 찾아라 그리고 길들이려는 나만의 습관 (0) | 2022.01.13 |
- Total
- Today
- Yesterday
- reactquery
- 네트워크
- 실전프로젝트
- 무한스크롤
- GIT
- React Query
- 리액트네이티브
- html
- 모두를위한컴퓨터과학
- 자바스크립트알고리즘
- React
- 알고리즘자바스크립트
- network
- css
- javascript
- 클로저
- 리액트
- python
- 프로그래머스 베스트앨범 자바스크립트
- 백준
- 프로그래머스 자바스크립트
- 자바스크립트 클로저
- 모두를 위한 컴퓨터 과학
- cs50
- 프로그래머스
- 항해99
- github
- 자바스크립트
- 자바스크립트 비동기 처리
- 타입스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |