꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

알고리즘 31

알고리즘의 복잡도(Complexities)

✔ 알고리즘의 복잡도 크게 공간 복잡도와 시간 복잡도 두 가지로 나눌 수 있습니다. 서로 Trade-off 관계가 있습니다. 공간 복잡도는 메모리를 얼마나 사용하냐에 대한 것이고, 시간 복잡도는 얼마나 많은 일을 하냐에 대한 것입니다. 알고리즘의 Complexity가 높을수록 알고리즘을 구동하는 데에 더 많은 비용이 듭니다. ✔ 공간 복잡도 알고리즘이 동작하기 위해 필요한 공간, 즉 메모리의 크기와 관련있습니다. 많은 경우, 연산의 중간 결과를 저장하기 위해 메모리를 소비합니다. 중간 결과를 저장해서 중복 연산을 줄일 수 있습니다. ✔ 시간 복잡도 알고리즘이 동작하는 데에 걸리는 시간 또는 연산의 횟수와 관련있습니다. 환경에 따라서 소비되는 시간이 다를 수 있기 때문에 연산의 횟수로 비교하는 것이 좀 더..

자료와 자료구조 그리고 알고리즘

✔ 자료란 현실 세계로부터 수집한 사실이나 개념의 값 또는 이들의 집합입니다. 특정 용도로 사용하기 위해 처리하거나 가공한 것을 정보라 합니다. 예를 들어 A반에 각각 90점, 95점, 85점을 받은 세 명의 학생이 있고, B반에 각각 40점, 90점, 100점을 받은 세 명의 학생들이 있다고 생각해봅시다. 여기서 학생들이 받은 점수가 자료가 되며, 만약 반끼리 비교하기 위해 평균을 구했다면, 평균이 정보에 해당합니다. ✔ 자료구조란 자료구조는 자료 값의 모임, 자료 간의 관계, 그리고 자료에 적용할 수 있는 함수나 명령을 의미합니다. 자료는 리스트 구조, 트리 구조 등의 관계를 갖게 됩니다. ✔ 자료구조의 특징 내가 원하는 목적에 맞게 효율적으로 동작합니다. 그리고 추상화가 가능해야 합니다. 추상화란 ..

자바스크립트 '일주일 날짜 구하기'

오늘을 기준으로 YYYY-MM-DD 형식의 문자열을 요소로 갖는 배열로 일주일 간의 날짜를 구하는 함수를 완성하라. 단, 함수가 반환하는 배열은 일요일부터 시작해서 토요일까지 구성한다. function getCurrentWeek() { } console.log(getCurrentWeek()); /* 오늘이 2020-10-31인 경우, [ '2020-10-25', '2020-10-26', '2020-10-27', '2020-10-28', '2020-10-29', '2020-10-30', '2020-10-31' ] */ 풀이 function getCurrentWeek() { const day = new Date(); const sunday = day.getTime() - 86400000 * day.getDa..

자바스크립트 '요일 구하기'

2016년 1월 1일은 금요일이다. 2016년 a월 b일은 무슨 요일일까? 두 수 a, b를 입력받아 a월 b일이 무슨 요일인지 출력하는 getDayName 함수를 완성하라. 요일의 이름은 일요일부터 토요일까지 각각 SUN, MON, TUE, WED, THU, FRI, SAT를 출력한다. 예를 들어 a=5, b=24가 입력된다면 5월 24일은 화요일이므로 TUE를 반환한다. function getDayName(a, b){ } console.log(getDayName(5, 24)); // TUE 풀이 function getDayName(a, b) { const day = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']; return day[new Date(`2016..

자바스크립트 '특별한 정렬'

n개의 정수를 가진 배열이 있다. 이 배열은 양의 정수와 음의 정수를 모두 가지고 있다. 이 배열을 좀 특별한 방법으로 정렬해야 한다. 음의 정수는 앞쪽에 내림차순으로, 양의 정수는 뒤쪽에 있어야 한다. 단, 인수로 주어진 원본 배열은 변경되지 않아야 한다. 예를 들어, [-1, 1, 3, -2, 2, 0]이 주어졌을 때, [-1, -2, 0, 1, 2, 3]를 반환한다. function specialSort(array) { } const testArray = [-1, 1, 3, -2, 2, 0]; console.log(testArray); // [ -1, 1, 3, -2, 2, 0 ] console.log(specialSort(testArray)); // [ -1, -2, 0, 1, 2, 3 ] 풀이 ..

자바스크립트 '최단 거리 1차원 점의 쌍 구하기 (DAUM)'

1차원의 점들이 주어졌을 때, 그중 가장 거리가 짧은 것(들)의 쌍을 배열로 반환하는 함수를 작성하라. (단 점들의 배열은 모두 정렬되어있다고 가정한다.) 예를 들어 [1, 3, 4, 8, 13, 17, 20, 23, 24]이 주어졌다면, 결괏값은 [[3, 4], [23, 24]]가 될 것이다. function findMinDistance(array){ } // 1차원 점의 배열 var array = [1, 3, 4, 8, 13, 17, 20, 23, 24]; console.log(findMinDistance(array)); // [[3, 4], [23, 24]] 풀이 function findMinDistance(array) { let result = []; let min = Number.MAX_VALU..

자바스크립트 '배열의 인접한 요소곱 중 가장 큰 값 구하기'

인수로 주어진 정수의 배열에서 인접한 요소의 곱이 가장 큰 값을 반환하는 함수를 완성하라. 예를 들어 인수가 [3, 6, -2, -5, 7, 3]인 경우, 21을 반환한다. function adjacentElementsProduct(arr) { } console.log(adjacentElementsProduct([3, 6, -2, -5, 7, 3])); // 21 풀이 function adjacentElementsProduct(arr) { const multiplicationArr = []; for (let i = 0; i < arr.length - 1; i++) { multiplicationArr.push(arr[i] * arr[i + 1]); } return Math.max(...multiplicat..