본문 바로가기

Algorithm272

[ 자바스크립트(JavaScript) ] section07 - 8 - 회의실 배정(greedy) 📍 section07 - 8 - 회의실 배정(greedy) 이번 문제는 greedy 문제다. greedy가 무엇인지 궁금하다면 이전에 작성한 글을 참고하자. 보통 정렬 문제와 자주 짝을 지어 출제되는데 강의 선생님께서 정렬 이후 순서대로 하나씩 처리하는 로직이나 우선순위 큐를 사용하는 로직은 보통 그리디로 풀면 된다고 하셨다. 문제에서 회의가 겹치지 않으면서 회의실을 사용할 수 있는 최대수의 회의를 찾으라고 했는데, 최대한 많이 회의를 하려면 끝나는 시간이 짧은 순서대로 정렬하고 풀어야 한다. 끝나는 시간이 긴 시간부터 풀게 되면 만약, 해당 시간이 끝나기 전에 2개의 회의를 진행할 수 있다면 손해기 때문이다. 끝나는 회의 순으로 오름차순 정렬한다. 이전 회의 종료시간 eT(endTime)=0으로 초기화.. 2021. 9. 11.
[ 자바스크립트(JavaScript) ] section07 - 7 - 좌표정렬 📍 section07 - 7 - 좌표정렬 평면상의 좌표(x, y)가 주어질 때 모든 좌표를 오름차순으로 정렬하는데 만약, x값이 같으면 y을 기준으로 정렬하는 문제다. 잘 내림차순 / 오름차순도 보고싶다면 이전글도 참고하자. function solution(arr) { let answer = arr; arr.sort((a, b) => { if (a[0] === b[0]) return a[1] - b[1]; else return a[0] - b[0]; }); return answer; } let arr = [ [2, 7], [1, 3], [1, 2], [2, 5], [3, 6], ]; console.log(solution(arr)); 👉🏾 [[1, 2], [1, 3], [2, 5], [2, 7], [3, .. 2021. 9. 10.
[ 자바스크립트(JavaScript) ] section07 - 6 - 장난꾸러기 현수 📍 section07 - 6 - 장난꾸러기 현수 여러 학생들 사이에서 자리를 바꾼 현수와 짝꿍의 번호를 출력하는 문제다. sort를 사용하지 않고 앞 뒤 index를 비교하여 감소하는 index면 서로 자리를 바꿨다고 판단할 수 있지만, 앞 뒤 index가 동일할 때는 어느번호가 현수, 짝꿍인지 모르기 때문에 sort를 사용했다. arr과 copyArr을 비교한 다음, value가 다른 index를 답으로 리턴했다. // let arr = [120, 125, 152, 130, 135, 135, 143, 127, 160]; let arr = [120, 130, 150, 150, 130 ,150] console.log(solution(arr)); function solution(arr) { let sortA.. 2021. 9. 10.
[ 자바스크립트(JavaScript) ] section07 - 5 - Least Recently Used(카카오 캐시 문제 변형) 📍 section07 - 5 - Least Recently Used(카카오 캐시 문제 변형) 간략한 문제 설명: LRU 알고리즘은 가장 최근에 사용되지 않은 것의 의미를 가지고 있다. 만약, Cache Miss일 땐 다음 task가 cache의 맨 앞에 오고 모든 작업이 뒤로 밀리고, Cache Hit 일 땐 다음 task와 동일한 cache안에 있는 값을 맨 앞으로 당겨오고 나머지는 한 칸씩 뒤로 미루는 문제이다. 예를 들어 현재 cache가 [1, 2, 3, 0, 0]이고 다음 task는 2라면 [2, 1, 3, 0, 0, 0]이 된다. 이 문제는 삽입 정렬의 특징인 target을 temp에 저장하고 temp보다 arr[i]=arr[i-1]처럼 덮어 씌우는 방식을 이용하면 풀 수 있는 문제이다. 중요.. 2021. 9. 10.
[ 자바스크립트(JavaScript) ] section07 - 4 - 삽입정렬 📍 section07 - 4 - 삽입 정렬 삽입 정렬은 선택정렬과 비슷하지만 조금은 다른 방식이다. 삽입 정렬의 간략한 소개는 삽입 정렬 5분 만에 이해하기 - Gunny의 영상을 확인하자. 삽입 정렬은 선택 정렬보다 시간 복잡도면에서 효과적인 알고리즘인데 만약, 데이터가 거의 정렬되어있다고 가정하면 while문을 거의 수행하지 않으므로 O(N)의 시간복잡도를 보여준다. 하지만 데이터가 역 정렬(반대로 정렬)되어있다면 index 끝까지 while문을 수행하므로 최악의 경우인 O(N^2)을 나타낸다. 1. i가 1부터 시작하여 n까지 탐색한다. (left 인덱스 사용으로 인해 0부터 시작을 하지 않음) 2. temp에 arr[i]를 선언한다. (나중에 덮어 씌운 값 맨 앞에 넣을 예정) 3. left가 0.. 2021. 9. 9.