분류 전체보기
[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] fill 2차원배열 주의점
fill 함수를 통해서 2차원 배열을 만들때 문제가 생길 수 있다. const ary = new Array(10).fill([false, false, false, false]); console.log(ary); ary[0][2] = true; console.log(ary); 다음과 같이 fill을 통해서 false가 담긴 2차원 배열을 만들었다고 생각해보자. 3라인과 같이 0번째 라인의 2번째 값을 true로 바꾸면 위와같이 모든 부분이 다 true로 바뀌게 된다.. 코딩테스트를 준비하다가 해당 부분때문에 골머리를 많이 썩였다. fill같은 경우, 하나의 값이 아닌 배열을 넣는경우 하나의 배열을 생성하고 그 주소값을 참조한 배열들을 넣기때문에 우리 눈에는 다 다른 배열같지만 실제로는 같은 배열이 담기기 ..
[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