프로그래머스
-
[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..
-
[CodeKata] 프로그래머스 : 4.7(수), 압축Algorithm 2021. 4. 8. 19:46
🥋 Ooooth!! (Level 2) 우선 문자열을 잘라가는데, 이는 사전에 해당 문자열이 포함되어있어야 한다는 기준을 고려해야 한다. KAKAO를 자르기 시작하면, KA는 사전에 포함되어있지 않으므로 그 전까지인 K의 인덱스를 정답배열에, KA는 사전의 새로운 요소로 추가해주면 된다. 위 일련의 처리가 끝나면, 그 다음부터인 A에서 시작하여, AK, AKA... 순으로 검색하면 된다. (여기서도 AK가 사전에 없으므로 멈추게 되겠지) 🧮 풀이 function solution(msg) { let answer = []; let dic = Array.from({ length: 27 }, (_,i) => String.fromCharCode(i+64)) let s = 0; let e = 1; while (tru..