FrontEnd/프로그래머스

    [JS] 후보키

    문제의 조건을 조금 헷갈려서 많이 헤맨 문제였다. 처음에는 조합을 활용해서 1개짜리,2개짜리,3개짜리 ,,, 이런식으로 후보키를 찾아 나가되 최소성을 깨지 않기 위해서 한번 후보키가 된 경우는 삭제해야 한다고 생각했다. [["a", "1", "aaa", "c", "ng"], ["b", "1", "bbb", "c", "g"], ["c", "1", "aaa", "d", "ng"], ["d", "2", "bbb", "d", "ng"]] 그런데 위와같은 경우를 보자. 해당 경우의 후보키는 [0] , [2,3] , [1,3,4] 이렇게 3개가 나온다. 즉 , 3번이 [2,3] 한번의 쌍으로 들어가긴 했지만 [1,3,4]로 후보키가 이뤄질 수 있기때문에 한번 후보키가 된경우에서는 빼면 안된다. 후보키가 완성되었다면..

    [JS] 타겟 넘버

    dfs를 활용해서 모든 경우의 수를 탐색하면 된다! 지금 생각하면 왜 굳이 끝에서부터 검색을 했는지 모르겠다. 앞에서부터 차근차근 검색하는게 조금 더 깔끔한 코드가 되었을 것 같다. function solution(numbers, target) { const dfs = (ary,num) => { if (!ary.length) return num===target ? 1 : 0 return dfs(ary.slice(0,ary.length-1),num+ary[ary.length-1]) + dfs(ary.slice(0,ary.length-1),num-ary[ary.length-1]) } return dfs(numbers,0) }

    [JS] 스킬트리

    스킬트리에 해당되는 부분들만 추출한 다음 , 스킬트리와 일치하는지 확인하면 된다. "BACDE" 라면 "BCD" 문자만 skill에 포함되므로 남게 된다. 이때 둘의 길이가 같기 때문에 "BCD"와 스킬트리의 "CBD"를 비교하면 문제를 해결할 수 있다. function solution(skill, skill_trees) { return skill_trees.reduce((a,c) => { const sk = c.split("").filter(v => skill.includes(v)).join('') return sk===skill.slice(0,sk.length) ? a+1 : a },0) }

    [JS] 방문 길이

    방문 배열을 설정하는데, 방문한 좌표를 기록해 나가는 것이 아닌, 길을 저장하는게 문제의 키 포인트이다. 따라서 방문된 곳을 저장하는 배열에 상,하,좌,우를 기록하기위해 3차원 배열을 통해 각 좌표마다 [false,false,false,false] 와 같이 저장하게 해두었다. 각각 상,우,하,좌 순서대로 저장하게 해 두었고 만약 방문하지 않은 배열이라면 해당 길들을 방문처리 해주면된다. function solution(dirs) { const d = { "U" : [0,-1], "R" : [1,0], "D" : [0,1], "L" : [-1,0], } const dIdx = { "U" : 2, "R" : 3, "D" : 0, "L" : 1, } const ndIdx = { "U" : 0, "R" : 1,..

    [JS] 문자열 압축

    문자열을 1~s.length 까지 하나씩 검사해봐서 가장 최소의 경우를 찾았다. reduce를 활용해서 문제에서 말하는대로 문자열을 만들었다. 단, aabbccdd 가 문제에서 2a2b2c2d였다면 a2b2c2d2

    [JS] 괄호 변환

    문제에서 주어진대로 해결하면 되는 구현 문제였다. 개인적으로 이러한 구현문제들은 추상화를 해서 구현을 하면 실수할 확률이 많이 적어지는 것 같아서 최대한 추상화를 해서 해결해보았다. 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다. 3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다. 4. 문자열 u가 "올바른 괄호 문자열"이 아니라면 아래 과정을 수행합니다. 4-1. 빈 문자열에 첫 번째 문자로 '('를 붙입니다. 4-..