목록Programming (128)
fffo
함수의 일급 객체 일급 객체의 조건 무명의 리터럴로 생성 가능(런타임에 생성 가능) 변수나 자료구조(객체, 배열 등)에 저장 가능 함수의 매개변수에 전달 가능 함수의 반환값으로 사용 가능 함수 객체의 프로퍼티 arguments 함수 호출 시 전달된 인수의 정보를 담고 있는 유사 배열 객체이자 이터러블 자료구조 함수 내부에서 지역 변수처럼 사용, 외부에서 참조 불가 arguments 프로퍼티로서 사용하는 방법은 ES3부터 표준에서 폐지됨. 함수 내부에서 지역 변수처럼만 사용 권장 js는 선언된 매개변수의 개수와 함수 호출 시 전달되는 인수의 개수를 확인하지 않으므로 인수 개수를 확인하는 동작 시 arguments 객체를 활용. 가변 인자 함수 구현 용이 ES6에서 나온 Rest 파라미터로 가변 인자 함수 ..
웹 접근성에 대해 이해하기 위해 구체적인 요소를 대상으로 웹 접근성 분석을 해봤다. 이번에 다룰 요소는 데이터 테이블이다. 접근성이 좋지 않은 표를 고쳐보는 방식으로 접근했는데, 평소에 옷을 사는 사이트에 마침 괜찮은 예시가 있었다. 웹 접근성이 좋지 않은 데이터 테이블 예시 가장 큰 문제점은 표를 하나의 이미지로 대체했다는 점이다. 심지어 대체 텍스트도 없는 이미지이다. 표의 규모가 작기 때문에 표 내부의 문제점은 그리 크진 않지만, 적어도 표의 머리 행과 열은 잘 구분될 수 있게끔 경계 강조나 색 대비를 넣어 주는 편이 더 나을 것 같다. 또한 표의 내용면에서도 문제점을 발견할 수 있었는데, 맨 마지막 행을 보면 머리 열이 비어있어 해당 행의 숫자가 무엇을 표현하는 지 추측을 할 수밖에 없다. 물론 ..
문제 접근 및 풀이 정규 표현식에 변수를 넣는 방법을 배웠다. 코드 /* 숫자 빈도수 구하기 */ /* user code */ function answer(s, e) { let result = []; let str = ""; for (let i = s; i
문제 접근 및 풀이 2중 for문으로만 생각했는데 풀이를 보니 속도가 O(1)인 객체탐색을 통해 O(n)으로 풀 수 있는 문제였다. 코드 /* two sum */ /* user code */ function answer(nums, target) { let map = {} for (let i = 0; i < nums.length; i++) { const rest = target - nums[i]; if (map[rest] !== undefined) { return [map[rest], i]; } map[nums[i]] = i; } } /* main code */ let input = [ // TC: 1 [[2, 7, 11, 15], 9], // TC: 2 [[3, 2, 4], 6], // TC: 3 [[3..
문제 접근 및 풀이 9개중 7개를 택하는 9C7 조합(combination)으로 접근하는 방법밖에 떠오르지 않았는데 풀이를 보니 더 간단한 방법이 있었다. 9개 중 7개를 선택하는 대신 2개를 선택하는 방법을 택하는 것이다. 기존에 생각했던 대로 풀었더라면 7중 for문이나 깊은 콜스택의 재귀함수를 써야했다. 코드 /* 일곱 난장이 */ /* user code */ function answer(dwarf) { let result = [...dwarf]; const fake = dwarf.reduce((acc,cur)=>{ return acc + cur; }) - 100; for (let i = 0; i < dwarf.length; i++) { for (let j = i + 1; j < dwarf.leng..
문제 문제 설명 압축 신입사원 어피치는 카카오톡으로 전송되는 메시지를 압축하여 전송 효율을 높이는 업무를 맡게 되었다. 메시지를 압축하더라도 전달되는 정보가 바뀌어서는 안 되므로, 압축 전의 정보를 완벽하게 복원 가능한 무손실 압축 알고리즘을 구현하기로 했다. 어피치는 여러 압축 알고리즘 중에서 성능이 좋고 구현이 간단한 LZW(Lempel–Ziv–Welch) 압축을 구현하기로 했다. LZW 압축은 1983년 발표된 알고리즘으로, 이미지 파일 포맷인 GIF 등 다양한 응용에서 사용되었다. LZW 압축은 다음 과정을 거친다. 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다. w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다..
문제 문제 설명 캐시 지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다. 이 프로그램의 테스팅 업무를 담당하고 있는 어피치는 서비스를 오픈하기 전 각 로직에 대한 성능 측정을 수행하였는데, 제이지가 작성한 부분 중 데이터베이스에서 게시물을 가져오는 부분의 실행시간이 너무 오래 걸린다는 것을 알게 되었다. 어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시작하였고, 제이지는 DB 캐시를 적용하여 성능 개선을 시도하고 있지만 캐시 크기를 얼마로 해야 효율적인지 몰라 난감한 상황이다. 어피치에게 시달리는 제이지를 도와, DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오. 입력 형..
생성자 함수에 의한 객체 생성 Object 생성자 함수 빌트인 생성자 함수를 이용해 객체(인스턴스)를 생성 특별한 이유가 없다면 그리 유용하진 않음 생성자 함수 객체 리터럴에 의해 의한 객체 생성은 생성의 재사용이 어려움 생성자 함수는 프로퍼티 구조가 동일한 객체 생성에 재사용 용이 function People(name) { this.name = name; this.greeting = function() { return `Hi. I'm ${name}.` }; } const p1 = new People('dlwlrma'); const p2 = new People('BDNS'); p2.skill = function() { return 'Bouncy bouncy ~~~'; } console.log(p1.gre..