CodeKata
-
[CodeKata] 코딩테스트 : 5.7(금), 문제풀이Algorithm 2021. 5. 8. 20:09
🥋 문제1. 두 좌표 안에 속한 좌표들의 개수 구하기 location 좌표들의 배열([x,y]), s와 e 2개의 기준좌표가 매개변수로 주어진다. 이, s와 e 2개의 좌표로 인해 생기는 사각형 내에 속하는 좌표들의 개수를 반환하는 함수를 만드는 문제다. (예시 : s [1, 4], e [4, 1] 내에 속하는 location [[0,3], [1,1], [1,5], [2,2], [3,3], [4,0]] 은 3개이다.) 🧮 풀이 function solution1(location, s, e) { const rangeX = [s[0],e[0]].sort((a,b) => a-b); const rangeY = [s[1],e[1]].sort((a,b) => a-b); let count = 0; location.fo..
-
[CodeKata] 프로그래머스 : 5.4(화), 가장 먼 노드Algorithm 2021. 5. 4. 18:41
🥋 Oooth More!! (Level 3) 🧮 풀이 * 7, 8, 9번에서 메모리 초과 오류가 발생하였다. function solution(n, edge) { const vertex = Array.from({ length: n }, () => new Array(n).fill(false)); edge.forEach(e => vertex[e[0]-1][e[1]-1] = vertex[e[1]-1][e[0]-1] = true); let check = new Array(n).fill(0); let queue = [0]; while (queue.length > 0) { const node = queue.shift(); vertex[node].forEach((path, idx) => { if (path && che..
-
[CodeKata] 프로그래머스 : 5.3(월), 네트워크Algorithm 2021. 5. 3. 16:24
🥋 Oooth More!! (Level 3) 🧮 풀이 function solution(n, computers) { let answer = 0; let nodes = Array.from({ length: n }, (_,i) => i); let queue = []; while (nodes.length > 0) { if (queue.length === 0) { answer++; queue.push(nodes.shift()); } else { const now = queue.shift(); nodes.forEach(node => { if (computers[now][node] === 1) { queue.push(node); nodes = nodes.filter(e => e !== node); } }) } } r..
-
[CodeKata] 프로그래머스 : 5.1(토), 자물쇠와 열쇠Algorithm 2021. 5. 1. 22:58
🥋 Oooth More!! (Level 3) * 풀이 강의 링크 : programmers.co.kr/learn/courses/10336?utm_source=programmers&utm_medium=test_course10336&utm_campaign=course_10336 key를 90도씩 돌려, key의 돌기들로 Lock의 홈을 채울 수 있으면 된다. 단, key의 돌기가 Lock의 돌기와 만나는 경우가 있으면 안된다. 🧮 풀이 function rotateArr(originalArr) { const N = originalArr.length; const rotatedArr = Array.from(Array(N), () => new Array(N).fill(null)) for (let row = 0; ro..
-
[CodeKata] 프로그래머스 : 4.30(금), 2 x n 타일링 & N으로 표현Algorithm 2021. 4. 30. 11:31
🥋 Oooth More!! (Level 3) 🧮 풀이 const solution = (n) => { let previous = 0; let current = 1; for (let i = 0; i < n+1; i += 1) { const save = previous; previous = current current = (save + current) % 1000000007 } return previous ; } 피보나치 수열의 규칙성을 가진 문제다. 단, 본래 피보나치보다 인덱스가 1 많아야 한다. 효율성을 줄임에 있어 많은 고민을 했다. 우선, 함수를 2번 선언하는것과 solution 1개로만 연산하는 것에서 후자가 효율적이었다. 또한, 본래는 save에 (previous + current) % 10000..
-
[CodeKata] 프로그래머스 : 4.28(수), 추석 트래픽Algorithm 2021. 4. 28. 17:57
🥋 Oooth More!! (Level 3) * 해설 보러가기 링크 : tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/ 레벨3 첫 문제부터 카카오라서 적잖이 당황했다.. ㅎㅎ 배열의 각 값은 종료시점과 트래픽 시간을 묶은 string 이다. 이를 먼저 시작, 종료시간으로 변환해서 트래픽 구간을 알수 있게끔 해야겠다. 그리하여, 이 트래픽 구간들이 가장 많이 포함되는 1000ms의 구간을 찾아 해당 갯수를 반환하면 된다. 🧮 풀이 function solution(lines) { lines = lines.map((line) => { const [, time, gap] = line.split(" ") const [h, m, s] = time.split(..
-
[CodeKata] 프로그래머스 : 4.21(수), n진수 게임Algorithm 2021. 4. 21. 19:28
🥋 Ooooth!! (Level 2) 카카오 문제 치고는 꽤 단순한 문제다. 0부터 n진수 숫자를 나열하면서, 해당 차례의 값을 개수(t)만큼 저장해줘야 한다. 🧮 풀이 function solution(n, t, m, p) { let strings = '' let stringNum = 0; let answer = ''; let count = 0; while (count < t) { const target = strings[m*count + p-1]; if (!target) { strings += stringNum.toString(n); stringNum++; } else { answer += target; count++; } } return answer.toUpperCase(); } strings는 n진..
-
[CodeKata] 프로그래머스 : 4.20(화), 파일명 정렬Algorithm 2021. 4. 20. 17:54
🥋 Ooooth!! (Level 2) 파일명들의 배열을 재정렬하면 된다. 먼저 나누는 방법은 가운데 숫자(최대 5자리) 기준으로 Head, Number, Tail 세 부분이다. 정렬방법은 1) Head 사전순, 2) Number 숫자비교(0제외), 3) 인덱스 순이다. 즉, Tail은 필요가 없을 것이다. 🧮 풀이 function solution(files) { const regex = /^[0-9]*$/ let fileInfos = []; files.forEach(file => { const fileStrs = file.split("") const idx1 = fileStrs.findIndex(s => regex.test(s)); let idx2; for (let i = idx1+1 ; i < idx1..