본문 바로가기
반응형

Algorithm45

Level2. 프로그래머스 [1차] 캐시 - JavaScript 접근 우선, LRU(Least Recently Used)가 뭔지 간단하게 알아보자. LRU(Least Recently Used Cache)는 오랫동안 사용하지 않은 데이터 부터 없애는 방법 Double Linked List를 사용할 경우 입력값 [1,2,3]에 대해 1 / 2 -> 1 / 3 -> 2 -> 1과 같은 방식으로 저장함 즉 최근에 사용한게 맨 앞에 위치 여기서 cacheSize가 3이고 입력값이 추가로 4가 들어오면 4->3->2가 된다. 그래서 다음과 같이 생각해 보았다. 도시이름 순회 도시가 cache에 있는지 확인 있다면 2가지 경우로 나뉨 발견된 index의 값을 저장 하고 앞에 있는 것들을 한칸씩 민다. 그다음 저장한 값을 맨 앞에 저장 없다면 우선, cacheSize가 0인지 예외.. 2020. 7. 8.
Level2. 프로그래머스 영어 끝말잇기 - JavaScript 문제 설명 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 이전에 등장했던 단어는 사용할 수 없습니다. 한 글자인 단어는 인정되지 않습니다. 다음은 3명이 끝말잇기를 하는 상황을 나타냅니다. tank → kick → know → wheel → land → dream → mother → robot → tank 위 끝말잇기는 다음과 같이 진행됩니다. 1번 사람이 자신의 첫 번째 차례에 tank를 말합니다. 2번 사람이 자신의 첫 번째 차례에 .. 2020. 7. 8.
Level2. 프로그래머스 최솟값 만들기 - JavaScript 접근 A에서 가장 작은 값 B에서 가장 큰 값을 곱하면 최솟값이 만들어진다. 따라서 A를 오름차순으로 정렬 ex) [1,3,5,6,7], B를 내림차순으로 정렬 ex) [9,5,3,2,1] 각 배열에서 원소는 한번만 사용하니까 같은 인덱스끼리 곱하고 이전 값과 더하면서 누적하면 해당 문제의 최솟값을 구할 수 있다. function solution(A,B){ var answer = 0; // 오름차순 A.sort((a,b)=>a-b); //내림차순 B.sort((a,b)=>b-a); // 같은 인덱스의 값 끼리 곱하고 이전 값과 더하여 누적 answer = A.reduce((acc,n,idx)=>{ return acc += n*B[idx]; },0); return answer; } 2020. 7. 7.
Level2. 프로그래머스 가장 큰 수 - JavaScript 처음 접근했을 때는 모든 경우의 수를 구하거나 1의 자리를 기준으로 내림차순하고 이후에 두 번째 자리를 기준으로 재정렬하는 방법을 생각했으나 numbers의 길이가 100,000이하 이고 각 원소가 1000이기에 어떻게 풀지 고민하고 있다고 다른 해설을 참조하게 되었다. 1. numbers의 각 원소를 문자로 변경한 배열을 정렬한다. 2. 정렬은 문자 b + 문자 a를 합치고 숫자형으로 바꿔준 값과 문자 a + 문자 b를 합치고 숫자형으로 바꿔서 빼준다. 여기서 마이너스 값이면 a는 앞으로 플러스 값이면 뒤로 간다. a가 6 이고 b가 10이라고 했을 때 610과 106 중에 610이 크기 때문에 a가 앞으로 이동한다. 3. numbers의 원소는 0이상으로 나와 있기 때문에 최악의 경우 numbers는.. 2020. 7. 7.