Algorithm/Programmers

    [JS][프로그래머스]1차_캐시

    문제 번호 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 분류 문제 풀이 LRU가 무엇인지 알아야하는 문제다. 정확하게 알 필요는 없고 가장 오랫동안 사용되지 않은 페이지를 교체한다라는 것만 알면 된다. 그리고 검색한 도시가 캐시되어 있다면 해당 도시가 최근에 검색 되었다고 업데이트 해야한다. 예를들어 [A,B,C] 라는 순서대로 검색을 진행 했었으면, A가 가장 오랫동안 사용되지 않은 페이지에 해당된다. 이때 다음 번에 A를 검색했으면 [B,C,A]로 상태를 업데이트 해주어야 한다. cache된 데이터를 담아주는 자료구조로 배열을 선택했기 때문..

    [JS][프로그래머스]배달

    문제 번호 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 분류 다익스트라 문제 풀이 문제를 읽어보면 1번 마을에서 다른 마을까지의 최소 경로를 알면 문제를 해결 할 수 있다는 것을 알 수 있다. 이것은 '한 정점에서 다른 모든 정점까지의 최소거리'를 구하는 다익스트라 알고리즘을 떠올리게 만든다. 다익스트라 알고리즘으로 1번 마을에서 다른 마을까지의 거리를 구하고 그 거리가 K이하가 되는 마을들을 모두 고르면 된다. 다익스트라를 사용하기 위해서 최소힙을 구현하자 class Node{ constructor(node, dist){ this.node =..

    [JS][프로그래머스]야근 지수

    문제 번호 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 분류 우선 순위 큐 문제 풀이 우선순위 큐를 활용하면 문제를 해결 할 수 있다. 문제에서 주어진 works를 살펴보면 works중 가장 큰 수가 가장 작아질 때가 정답이다. 따라서 MaxHeap을 사용해서 works에 남아있는 수 들 중에서 가장 큰 수를 1씩 줄여나가면 된다. MaxHeap class Node{ constructor(value) { this.value = value; } } class MaxHeap{ constructor(compare){ this.heap = []; th..

    [JS][프로그래머스]N-Queen

    문제 번호 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 분류 백트래킹 문제 풀이 2차원 배열을 생성해서 퀸을 놓으면서 해당 퀸이 지나가는 경로를 체크해서 다음 퀸이 해당 경로에 올 수 없도록 하려고 했다. 그러나 2차원 배열을 그때그때 지워가면서 확인하려 했으나 그렇게 되면 시간 초과에 걸리게 된다. 그래서 i번째 퀸을 놓을 수 있는지 다른 방법을 이용해서 확인해야 한다. 여기서 힌트를 읽어봤다. 1차원 배열을 사용하면 시간을 줄여서 확인할 수 있다. 예를 들어 'vailed [i] = 3'이라면 i행 3열에 퀸이 놓여있다는 뜻이다. 이를 활용..

    [JS][프로그래머스LV2]방금그곡

    문제 번호 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, programmers.co.kr 알고리즘 분류 문제 풀이 알고리즘은 어렵지않다. 주어진 정보를 어떻게 가공하여서 잘 비교하나가 중요한 문제였다. 이번 문제에서 가장 중요한 내용은 멜로디로 주어지는 내용중에 'C#'과 같이 두 글자를 한 글자로 보아야 한다는 것이다. 입력 'm' 이 대문자로만 주어진다는 내용을 못봤는데 다른 블로그를 참고해보니 소문자로는 입력되지 않는것 같다. 그래서 'C#'과 같이 뒤에 '#'이 붙은 멜로디의 경우 '#'앞에 있는 알파벳을 소문자로 바꾸..

    [JS][프로그래머스LV2]가장 큰 정사각형 찾기

    문제 번호 코딩테스트 연습 - 가장 큰 정사각형 찾기 [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9 programmers.co.kr 알고리즘 분류 DP 문제 풀이 처음 풀이는 DP를 사용하지 않았었다. 주어진 board 배열에서 1을 발견할때마다 그 점을 왼쪽 상단 모서리로 하여 만들 수 있는 가장 큰 정사각형의 크기를 구하여 답으로 반환했었다. 그러나 그렇게 풀이를 진행 할 경우 시간초과에 걸리게 된다. 따라서 해당 문제는 DP 알고리즘으로 해결하는 것이 맞다고 판단된다. 우선 주어진 board 배열보다 1행이 추가된 2차원 배열을 생성한다. const col = board[0].length; const row = board.length; let dp = new Arra..

    [JS][프로그래머스LV2]압축

    문제 번호 코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] programmers.co.kr 알고리즘 분류 특별한 알고리즘은 없다. 문제에서 요구하는대로 구현하면 되는 문제이다. 정규표현식과 메서드들을 잘 사용한다면 쉽게 풀 수 있다. 전체코드 function solution(msg) { var answer = []; let dictionary = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']; let reg = new Re..

    [JS][프로그래머스LV2]파일명 정렬

    문제 번호 코딩테스트 연습 - [3차] 파일명 정렬 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램 programmers.co.kr 알고리즘 분류 문제 풀이 문제에서 주어진 조건대로 정렬을 사용해야하는 문제이다. 특별히 어려운 알고리즘은 없지만 조건이 여러개라서 잘 보고 천천히 풀면 된다. 나는 빈 배열을 생성하여 배열에 head, number, tail 프로퍼티로 이루어진 객체들을 push 한 뒤 정렬하는 방법을 선택하였다. 우선 입력받은 files 배열을 빈 배열인 file 배열에 넣어준다. let file = []; // 주어진 파일들을 입력받는 부분. for(le..