FrontEnd/프로그래머스

    [JS] H-Index

    내림차순 정렬을 한 이후, 내 인덱스보다 배열에 담긴 값이 작거나 같다면 그때의 i(인덱스) 값이 정답이 된다. function solution(citations) { citations.sort((a,b) => b-a) for (let i = 0 ; i < citations.length ; i++){ if (citations[i]

    [JS] 소수 찾기

    순열을 구하는 함수와 소수임을 판별하는 함수를 하나씩 구한 이후, 완전탐색으로 구했다. 1. 함수 이름을 조합으로 했는데 생각해보니 순서에 따라서 숫자가 달라질 수 있으므로 순열을 구하는게 맞는거 같아서 중간에 수정을 해주었다. 2. 소수인지 아닌지 판별하는 isPrime() 함수를 생성 3. 완전탐색으로 소수인 수들을 넣는데 011과 11의 경우 같은 수로 생각하므로 둘을 숫자로 바꾼 이후, Set 자료형을 활용해서 중복을 없애주는 형식으로 구현하였다. 4. Set의 size를 반환하면서 마무리 약간 복잡한 알고리즘이 들어간다기 보다는 3가지 정도의 문제가 합쳐진 듯한 문제였다. const getCombination = (arr,n) => { let ret = [] if (n===1) return ar..

    [JS] 조이스틱

    문제가 그리디 파트에 있어서 곰곰히 생각해봤는데 결국 이 문제는 알파벳을 돌리는 최소개수 + 조이스틱을 좌우로 돌리는 최소 개수를 구하는 문제였다. 알파벳을 돌려서 나오게 하는 최소개수는 사실 쉽다. N보다 작을때는 그냥, N보다 뒤에나오는 알파벳이 나오면 26에서 뺀 값을 주면 된다. (이부분이 그리디인가?) 문제는 조이스틱을 좌우로 돌리는 최소를 찾는 부분이었다. "BBBAAAAAAAB" "BAAABAAAAAAAAAAAB" 위와같이 한쪽으로만 가지 않고 쭉 가거나, A가나와도 우선 진행한 후에 돌아와야하는 케이스들이 많았기 때문이다. 문제를 읽어보니 입력으로 주어지는 문자의 총 케이스가 20개라서 그냥 완전탐색을 활용해서 체크하면 되겠다 라는 생각이 들었다. 따라서 dfs방식으로 좌우를 계산해줬다. ..

    [JS] 큰 수 만들기

    스택을 활용해서 구현하였다. 가장 큰 수를 만들기 위해서는 앞에서부터 값을 넣다가, 더 큰수가 나오게 되면 스택에 자기보다 큰 수가 나올떄까지 스택의 값을 없애주고 이를 카운트해주면된다. 만약 수를 다 뺐다면 스택에 추가만 해준다. 또한 해당 과정을 끝났을때 만약 제거될 수가 없다면, 수가 내림차순으로 정렬되어 있는 것이므로 맨 뒤에서부터 남은 개수만큼 잘라주면 된다. function solution(number, k) { const stk = [] let cnt =0 for (const n of number) { while (stk.length && +stk[stk.length-1] < +n && cnt

    [JS] 구명 보트

    처음에 문제를 잘못 읽어서 푸는데 애먹었던 문제였다. 최소한의 구명보트를 찾는데 어떻게 그리디로 해결할 수 있지? 끙끙대면서 문제를 읽어보니 구명보트에서는 최대 2명씩만 탈 수 있다는 조건이 붙어있는 문제였다. 아.. 우선 배열을 정렬하고, 즉, 가장 무거운사람과 가장 가벼운 사람을 비교해서 탈 수 있다면 둘을 태워보내고, 그렇지 않으면 무거운사람만 보내는 식으로 문제를 해결하면 된다! 이때 가장 가벼운 사람을 shift를 사용해서 꺼내면 시간복잡도가 늘어나니 인덱스를 활용해서 해결했다. function solution(people, limit) { people.sort((a, b) => a - b); let ret = 0; let i = 0 while (people.length-i > 0) { let ..

    [JS] 오픈채팅방

    userID가 바뀔때 저장해둘 DB역할을 해줄 객체를 하나 만들어준다. record배열을 순회하면서 change,enter가 들어올때마다 DB를 최신화를 시켜준다. 최신화된 내용의 객체를 활용해서 문자열을 만들어주고반환해준다. function solution(record) { const userDB = new Map() record = record.map(v => v.split(" ")) for (const [order,id,name] of record) { if (order !== "Leave") userDB.set(id,name) } record = record.filter(([order,id,name]) => order!=="Change") return record.map(([order,id,nam..