FrontEnd/프로그래머스

    [JS] 광물 캐기

    직관적인 방식으로 해결해본 것 같다. 중요한건 피로도가 1,5,25로 증가하기 때문에, 좋은 광물이 하나라도 있으면 그에 맞는 곡괭이를 사용하는 것이 좋다. 한번 곡괭이를 사용하면 5개는 써야하기 때문에 광물 5개를 한 세트로 묶고, 좋은 광물이 많은 것부터 좋은 곡괭이를 사용하여 채굴하면 된다. 정렬과 그리디 알고리즘을 활용해서 해결한 것 같다. 1. 가진 곡괭이로 캘수 있을 만큼의 광물을 count하기 2. 광물을 5개씩 분리해서 배열로 만들어주기 3. 다이아 > 철 > 돌 이 많은 순으로 배열 정렬해주기 4. 다이아 곡괭이 부터 소모하면서 광물 캐기 const count = (ary,word) => ary.filter(el => el === word).length function solution(p..

    [JS] 과제 진행하기

    차근차근 문제를 풀어보았다. 우선 문제 조건에서, plans 배열 안에 정렬되지 않은 상태로 주어질 수 있다고 나왔기에 정렬을 먼저 해주었다. 어차피 과제의 진행시간이 분단위로 나오기 때문에, 주어진 시간을 분단위로만 생각하기로 했다. plans 배열을 입맛대로 바꿔준 후 문제를 해결한 과정은 아래와 같다. 1. 결국, 현재 진행할 과제와 다음에 진행할 과제를 비교해야 하기 때문에 로직 통일성을 위해서 시작이 제일 늦고, 기간도 엄청 많은 일정 하나를 의도적으로 추가해준다. 2. 완료할 과제를 담을 배열과 시작했지만 끝내지 못할 과제를 담을 스택으로 사용할 배열을 하나 생성한다. 3. 다음 과제와 비교해서 각각의 과정을 실행한다. 3-1. 이번 수행할 과제가 다음 과제 전에 충분히 실행할 수 있는 경우 ..

    [JS] 연속된 부분 수열의 합

    처음에는 dp형식으로, 값을 하나씩 더해 나가면서 합이 맞춰지는 지 확인하고, 합이 맞춰지는 경우 해당 경우의 시작 인덱스와 끝 인덱스로 길이를 파악해서 답을 구하려고 했다. function solution(sequence, k) { const ary = [... new Array(sequence.length)].fill(0) let ret = [0,sequence.length-1] let s = 0 for (let i=0 ; i

    [JS] 두 원 사이의 정수쌍

    까다롭다면 꽤 까다로운 문제였다. 우선, 원의 특성을 알아야 한다. 원을 4분면으로 나누고, 안의 점의 개수를 센 이후 4배를 하면 모든 점의 개수를 알 수 있다. 단, x축이나 y축 중 겹치는 부분은 한 선만 겹치도록 해야지 4배를 해도 정상적으로 점의 개수가 나올 것이다. 처음에는 이중 for문을 활용해서 모든 좌표를 계산하려고 했었다. 문제 조건이 백만 좌표까지 주어지는데, 이중 for문으로는 당연하게도 시간초과가 발생하였다. 따라서 반복문을 한번 쓸 수 있는 방법으로 문제를 해결하였다. 예시의 경우 r2의 길이가 3, r1의 길이가 2이다. 1사분면의 점의 개수를 세보기로 하고, x축에 겹친 점만 해당하도록 해보자. 이때 우리가 세어야 하는 x좌표는 1,2,3이된다. 우리는 r1,r2의 길이를 알..

    [JS] 요격 시스템

    우선 나오는 미사일의 좌표들을 오름차순으로 정렬해준다. 이후, 2가지 케이스를 생각해주면 된다. 1. 한 선분을 잡고, 그 다음선분의 시작점이 내가 잡고있는 선분의 끝점보다 크지 않으면, 무조건 한줄로 끝낼 수 있다. 위 설명은 잘생각하면 당연한 말이다. 선분들이 서로 모두 겹쳐있다는 가정하에 한줄로 이어지는지 확인하는 방법은 위와 같다. 2. [[1, 10], [3, 4], [5, 6]] 와 같이, 한 선분이 길고, 나머지 선분들이 겹치지 않는 경우가 생길 수 있다. 이런경우에는 선분을 두번 그려줘야 하는데, 내가 잡았던 선분을 기준으로 다음 오는 선분이 만약 포함되어 있다면, 해당 선분으로 생각하고 있던 선분을 잡아주면 된다. [[1, 10], [3, 4], [5, 6]] a[0]-b[0]) let ..

    [JS] 왼쪽 오른쪽

    indexOf의 특성을 활용해서 l과 r의 index를 구한 후, 그에 따라 더 앞선 값에 따라서 왼쪽 혹은 오른쪽으로 잘리게 해 두었고, l과 r이 없는경우는 따로 예외처리를 해주었다. function solution(str_list) { const [l,r] = [str_list.indexOf('l') , str_list.indexOf('r')] if (l===-1 && r===-1) return [] else if (l===-1) return str_list.slice(r+1) else if (r===-1) return str_list.slice(0,l) else return l