본문 바로가기

Algorithm/프로그래머스30

Level2. 타겟 넘버(DFS/BFS) - JavaScript DFS를 활용해서 문제를 해결했다. numbers 배열에 들어 있는 각 원소를 노드라고 생각한다면 각 노드는 +노드, -노드의 두 분기로 나눠지게 된다. numbers가 [1,2,3]이라고 했을 때 실제 방문하는 노드는 1, 2, 3이 되는게 아니라 1 -> 2 -> 3 1 -> 2 -> -3 1 -> -2 -> 3 1 -> -2 -> -3 ... 처럼 노드가 달라진다. function solution(numbers, target) { var answer = 0; dfs(0, 0); return answer; function dfs(nodeIndex, totalNumber) { if (nodeIndex === numbers.length) { if (totalNumber === target) answer+.. 2021. 4. 19.
Level2. 프로그래머스 숫자의 표현- JavaScript 문제설명 연속한 자연수들로 숫자 n을 표현해야 한다. n이 9라고 할때 2 + 3 + 4 = 9 4 + 5 = 9 9 = 9 라고 표현할 수 있다. 문제 풀이 어떤 n 보다 작은 수를 시작하는 자연수로 잡고 연속한 자연수를 만들 때 n이 되는지 안되는지 판별하는 함수를 만들고 제일 작은 수 1부터 n까지 순회하면서 해당 함수의 파라미터로 시작으로 하는 숫자를 넣으면서 진행 판별 function solution(n) { var answer = 0; function re(current, sum){ if(sum === n) return true; if( sum > n) return false; return re(current+1, sum+current); } for( let i = 1; i 2020. 11. 6.
Level3. 프로그래머스 이중우선순위큐 - JavaScript 문제 설명 값 입력, 최댓값 삭제 최소값 삭제의 명령어들을 배열로 받아서 명령어를 실행하고 최종 배열의 길이가 0이면 [0,0]을 반환 아니면 [최대값, 최소값]을 반환하는 문제다. q에 있는 원소를 우선순위에 맞게 저장하는게 관건이다. 만일 배열이 [3,3,1]이고 새로운 원소 4가 우선순위 큐에 들어간다고 했을 때 [4,3,3,1]이 되어야 한다. JS에 splice라는 array method를 이용하면 쉽게 배열에 원소를 추가할 수 있다. 코드 흐름 명령문 순회 명령어에 따라 처리 만일 입력이면 우선순위 큐에 새로운 원소를 우선순위를 고려하여 삽입 삭제라면 큐에서 최대값 또는 최소값 삭제 모든 명령문이 끝나고 정답 반환 function solution(operations) { var answer =.. 2020. 11. 6.
Level3. 프로그래머스 멀리 뛰기 - JavaScript 문제 설명 효진이는 1칸, 또는 2칸을 뛸 수 있다. 칸 n이 주어졌을 때 효진이가 n에 도달할 수 있는 모든 경우의 수를 찾아야 한다. n이 4일 때 (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (2, 1, 1) (2, 2) 모든 경우의 수는 5번이다. 이 문제는 조합으로 풀 수도 있고 DP로도 풀 수가 있다. DP로 푼다면 작은 문제로 나누고 이 문제들의 정답이 큰 문제를 해결할 수 있다는 규칙성을 찾아야 한다. 규칙은 F(n)에서 n이 3이상일 때 F(n) = F(n-1) + F(n-2)이다. function solution(n) { let dp = [0, 1, 2]; if( n 2020. 11. 5.