FrontEnd
[JS] 뉴스 클러스터링
처음엔 set자료형을 활용해서 교집합,합집합을 구해보려고 했는데 집합이 다중집합이었다. 따라서 조금 다르게 해결해보았다. 1. 연속된 알파벳이 담겨있는 다중집합 만들기. 두 문자열을 getSet함수를 활용해서 다중집합으로 만들어주었다. 2. 교집합 만들기 문제에서 원하는 것은 교집합과 합집합의 크기이다. 교집합만 구한다면 합집합의 크기는 각 집합의 크기의 합에서 교집합을 빼면 손쉽게 구해줄 수 있다. 다중집합에서 교집합을 만들어야 했는데 Map자료형을 활용해서 구해보았다. 2번째 집합의 값들을 map자료형에 넣고, filter를 활용해서 map에 데이터가 있는지 없는지 유무를 확인했다. 만약 있다면 개수를 1씩 빼주어서 다중집합에서 교집합이 구현되도록 하였다. 3. 합집합의 크기가 0 이어서 계산할 수 ..
[JS] 캐시
오랜만에 LRU캐시에 대해 학습하였다. LRU 캐시란 Least Recently Used 즉, 가장 오래전에 사용된 데이터를 제거하는 방식을 가진 캐시이다. 처음에 이왕 추상화를 해볼꺼 더블 링크드 리스트를 구현해서 만드려고 했는데 어차피 캐시의 크기가 최대 30개이고 귀찮음이 발동해서 LRU 클래스를 만들어 보는것으로 타협해보았다. LRU클래스는 캐시와 maxSize만 가지고 있다. set명령어로 캐시에 값을 넣을때 캐시에 값이 있다면 해당 값을 캐시의 맨 앞으로 보내주고, 실행시간인 1을 반환해준다. 캐시에 아무것도 없다면 캐시의 맨앞에 새로운값을 넣어주고 만약 캐시의 크기가 초과되었다면 가장 오래된 값을 캐시에서 제거해준다. 그리고 실행시간인 5를 반환해준다. 문제에서 대소문자를 구별한다고 하지 않..
[JS] 방금 그곡
꽤나 재미있는 구현 문제였다. 우선 시간차이를 구해주는 함수와 a배열안에 b배열이 있는지 판단하는 함수를만들어주었다. a배열에 안에 b배열이 있다는건 [1,2,3,4,5] 안에 [1,2,3] 이들어왔을때 1,2,3이 연속으로 들어있으면 참을 반환해주는 함수이다. 즉, [1,2,5] 가 들어온다면 거짓을 반환한다. musicinfos를 split함수로 시작시간,끝시간,곡이름,악보로 분리해준 후, 문제에서 일치하는 노래가 많으면 재생시간이 긴 순서가 우선순위라 해주었으므로 정렬을 해준다. 이후 정규표현식을 활용해서 각 악보의 음계들을 배열로 분리해준다. 이제 해당 멜로디가 얼마나 나올지 구해줘야 하는데, getTimeDiff함수로 시간 차이를 구해준 이후, 몫과 나머지를 구해서 총 재생되는 최종 악보를 만들..
[JS] 압축
오히려 Map 자료형을 활용하면 좀 더 쉽게 풀 수 있던 문제였다. ABCDEFG....Z 까지를 각각 1 ~ 26까지 값으로 Map 자료형에 입력한 이후, 단어를 만들어 나가면서 Map에 없을때까지 단어를 만든 이후 단어를 추가해주면 된다. function solution(msg) { const map = new Map() let mapSize = 27 const ret = [] for (let i = 0 ; i < 26 ; i++) { map.set(String.fromCharCode(i+65) , i+1) } for (let i = 0 ; i < msg.length ; i++) { let word = msg[i] while(1) { const nWord = word + msg[i+1] if (map..
[JS] 파일명 정렬
한번에 풀리긴 했는데 왜 되는거지..? 란 생각이 들었다. 먼저 푸는 간략한 순서는 아래와 같다. 1. 문자열을 head,num,tail,v(원래값) 으로 나누어서 다시 저장. 2. sort 함수를 활용해서 head > num 순으로 정렬을 해주었다. 이때 num을 정규표현식으로 구한 이후, split함수를 썼는데 num이 두번나오는 경우를 어떻게 해야할지 고민하던 중, split함수의 2번째 인자를 활용하면 split배열의 최대 크기를 정해줄 수 있다고 해서 이를 활용해보았다. function solution(files) { const fileInfo = files.map(file => { const v = file file = file.toLowerCase() let num = file.match(/..
[JS] N진수 게임
나중에 기회가 된다면 한번 해보고픈(?) 게임이었다. 처음에는 내장함수를 체이닝해서 풀어보고 싶었는데 너무 길어져서 그냥 정답 문자열을 만드는 방향으로 만들었다. 1. 정답 문자열을 하나씩 만들 배열을 생성 2. 숫자를 하나씩 n진수로 변환 3. n진수를 문자로 바꾼 이후, p번째 순서라면 ret에 더해줌 function solution(n, t, m, p) { let ret = "" let i = 0 let cnt = 0 while (ret.length < t) { const num = i.toString(n).toUpperCase() for (const s of num.split("")){ if (cnt%m === p-1 && ret.length