FrontEnd/프로그래머스

    [JS] 2*n 타일링

    피보나치 수열과 유사한 형태로 답이 나오게 된다. 1,2,3,5,8,13 ... 단, 재귀를 활용하면 시간초과가 나오니 dp를 활용해서 풀었다! function solution(n) { const dp = Array(n) dp[0] = 1 dp[1] = 2 if (n

    [JS] 올바른 괄호

    괄호가 올바른지 아닌지만 구별하면 되기에 굳이 스택을 사용하지 않고 변수를 활용해보았다 ( 가들어오면 1을 더해주고 )가 오면 -1을 해주었다. 만약 cnt가 음수가 되면 올바른 괄호가 아닌 것이다. function solution(s){ let cnt = 0 for (let el of s) { if (el === '(') cnt +=1 else cnt -= 1 if(cnt < 0) { return false } } return cnt === 0? true: false; }

    [JS] 다음 큰 숫자

    숫자를 하나씩 키워가면서, 2진수로 바꿔서 1의 개수를 세서 같은 수가 나올때까지 구해주었다! function solution(n) { const cnt_1 = n.toString(2).split("").filter(v => v==="1").length while (true){ n += 1 if (n.toString(2).split("").filter(v => v==="1").length === cnt_1) return n } }

    [JS] 땅따먹기

    동적계획법을 활용하여 풀 수 있는 문제였다. 쉽게 생각해서 4개짜리 배열을 하나 만들어서 각 단계별로 해당 발판을 밟았을때의 최대 점수를 기록하면 된다. 말로할때는 조금 이해가 안될 수 있는데 예시를 dp를 채워간 과정을 보면 꽤 쉽게 이해할 수 있다! [ 1, 2, 3, 5 ] [ 10, 11, 12, 11 ] [ 16, 15, 13, 13 ] 1번 자리에 도착했다고 생각하면 그 전 단계에서 2,3,4번 자리에서 올 수 있는셈인데 2,3,4번 자리까지 누적된 점수의 가장 큰 값을 저장하면 된다. function solution(land) { const dp = [0,0,0,0] for (const score of land){ const tmp = [...dp] for (let i = 0 ; i < 4 ..

    [JS] 멀리뛰기

    규칙성을 찾으면 쉽게 해결할 수 있는 문제였다. 칸이 1개라면 -> 1개 칸이 2개라면 -> 2개 칸이 3개라면 -> 3개 칸이 4개라면 -> 5개 .... 규칙성이 피보나치 수열과 같음을 활용해서 해결할 수 있다. function solution(n) { let arr = [1n, 1n, 2n]; for(let i = 3; i

    [JS] 최댓값과 최솟값

    split함수를 활용해서 공백으로 만든 이후, Math의 내장함수 min과 max를 활용해서 최소,최대 값을 빼내주었다. `` 를 활용해서 문자열을 만들어 반환해서 해결하였다. function solution(s) { const ary = s.split(" ") return `${Math.min(...ary)} ${Math.max(...ary)}` }