본문 바로가기
반응형

Algorithm/프로그래머스30

Level2. 프로그래머스 [1차] 프렌즈4블록- JavaScript 접근 우선 board에서 2x2를 만족하는 모든 것을 확인 후 삭제 사라진 공간을 채우고 다시 반복 이 과정을 삭제되는 것이 없을 때 까지 진행 전체 적인 흐름도는 위와 같았다. 그렇다면 여기서 board에서 2x2를 만족하는 모든 것을 어떻게 판별할 것인가. 어떤 행,열의 값과 주변 3개의 값이 같으면 2x2에 만족하게 된다. 하지만 2차원 배열에서 맨위 맨왼쪽부터 시작하게 된다면 해당 값의 오른쪽과 아래쪽 그리고 오른쪽 아래쪽을 비교하고 같으면 2x2에 만족하게 된다. 예를 들어 행열이 다음과 같이 있다고 했을 때 행열 [0][0]의 값은 a이고 [0][1]과 [1][0] 그리고 [1][1]이 모두 a이면 2x2행열에 만족한다. 하지만 바로 삭제하게 되면 board[0][1]에서 새로 비교를 할 수가.. 2020. 7. 8.
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.