오늘의 할 일
✅ 📌 ~20:00 팀 데일리 미션 출제
✅ 📌 ~다음날 06:00 팀 데일리 미션 답변
✅ 📌 TIL 작성
✅ 위클리미션 week 11~12 진행
✅ 면접 스터디
✅ 알고리즘 스터디
오늘의 나는 무엇을 배웠을까?
6/13 면접 스터디
var funcs = [];
for (var i = 0; i < 3; i++) {
funcs[i] = function (){ return i; }
}
for (var j = 0; j < 3; j++) {
console.log(funcs[j]()); // 여기서 함수로 실행
}
- 클로저에 대한 질문을 받았다. 진짜 세상에 너무 어려웠음.. 면접에 자주 나오는 질문이라던데 실제 면접에서 이 문제를 맞닥뜨렸으면 답변을 제대로 못했을 것 같다.
- var는 함수 스코프만 가지기 때문에 for문에 쓰이는 for(var i=0; i<3; i++)의 i도 마찬가지로 for문이 끝난 이후에도 남아있다. 따라서 위의 경우 i=3으로 for문을 벗어나게 되고, 해당 i=3으로 값을 계속 참조하게 돼서 문제가 발생하더라.
- 해결 방법으로 위의 for문에서 쓰인 i를 let 키워드로 선언하는 방법이 있고, 또는 (아래 코드) 클로저 개념을 이용해 즉시 실행함수 안에 함수를 또 return하는 방식으로도 할 수 있다.
// 해결 코드
var funcs = [];
for(var i = 0; i < 3; i++) {
funcs[i] = (function(id){
return function(){ // closure
return id;
};
}(i));
}
for (var j = 0; j < 3; j++) {
console.log(funcs[j]()); // 여기서 함수로 실행
}
6/13 코테 스터디
1. 프로그래머스 - 베스트앨범(level 3)
- 파이썬의 dict(해시 자료구조)를 이용해 풀었다.
- 문제 유형이 해시여서 괜히 어려워보였는데 단순 구현 문제였고, 로직도 생각보다 어렵지 않았다.
2. 프로그래머스 - n^2 배열 자르기(level 2)
- 단순 구현 문제
- 2차원 배열로 처음에 접근했는데, 한 변의 길이가 최대 n=10^7이어서 시간 초과 (구현 다해놓고 나중에서야 n이 매우 크다는 것을 알았다..)
- 주어진 left, right 범위를 이용해 풀이
- 항상 "문제를 꼼꼼이 읽고 시작하자"라고 다짐하는데, 생각보다 쉽지 않은 것 같다. 그래도 문제를 잘못 이해해서 다시 고치는 시간이 배로 들기 때문에 다시 킵인마인드!
'Etc > 기록들' 카테고리의 다른 글
[TIL] 6월 14일 기록 (1) | 2023.06.14 |
---|---|
[WIL] 5월 1일 ~ 5월 7일 (0) | 2023.05.09 |
[TIL] 5월 5일 기록 (0) | 2023.05.09 |
[TIL] 5월 4일 기록 (0) | 2023.05.09 |
[TIL] 5월 8일 기록 (0) | 2023.05.09 |