CodeKata
-
[CodeKata] 프로그래머스: 10.31(일), 징검다리 건너기Algorithm 2021. 10. 31. 19:23
🥋 Oooth More!! (Level 3) 🧮 풀이 위 로직을 그대로 while 반복문으로 구현한 풀이이다. 정확성은 만점이나, 효율성에서 모두 초과가 발생하여 모범답안을 탐구했다! function solution(stones, k) { var answer = 0; while (true) { answer++; stones = stones.map(stone => Math.max(stone-1, 0)); idx = stones.findIndex(s => s === 0); while (idx !== -1) { const jump = stones.slice(idx+1,idx+k); if (jump.length === k-1 && !jump.find(stone => stone !== 0)) { return an..
-
[CodeKata] 프로그래머스: 10.24(일), 아이템 줍기(11주차)Algorithm 2021. 10. 25. 02:27
🥋 Oooth More!! (Level 3) 🧮 풀이 최단경로를 탐색하므로 BFS를 사용해야함은 알았으나, 구체적인 이동방법을 구현하기가 어려워 모범답안을 학습했다. 🖇 리뷰 function solution(rectangle, characterX, characterY, itemX, itemY) { const xmoves = [1, -1, 0, 0]; const ymoves = [0, 0, 1, -1]; // 최대 범위가 50이지만 좌표간의 거리를 생각해 2배 증가시킴 const maxSize = 101; const board = Array.from({ length: maxSize }, () => Array(maxSize).fill(0)); const newRect = rectangle.map((el) =..
-
[CodeKata] 프로그래머스: 10.17(일), 금과 은 운반하기Algorithm 2021. 10. 17. 20:22
🥋 Oooth More!! (Level 3) 🧮 풀이 정말 자괴감이 들 정도로, Level 3 대부분의 문제들을 풀지 못하고 있다. 좋은 풀이중에, 이분탐색 알고리즘으로 비교적 간단하게 푼 예시를 코드분석하고, 이분탐색에 대해 좀 더 공부해보고자 한다. 🖇 리뷰 function solution(a, b, g, s, w, t) { let answer = 10e5 * 4 * 10e9; let start = 0; let end = 10e5 * 4 * 10e9; while( start = t[i]) move_cnt++; gold += (now_g < move_cnt * now_w) ? now_g : move_cnt * now_w; silver += (now_s < move_cnt * now_w) ? now_s ..
-
[CodeKata] 프로그래머스: 10.11(월), 길 찾기 게임Algorithm 2021. 10. 11. 03:06
😅 서론 약 1달이 넘게 블로그 포스팅을 하지 않았음을, 오랜만에 블로그 글을 보고 인지하게 되었다.. ㅎㅎ 주된 핑계는, 회사의 코드 리뉴얼 작업에 많은 신경과 작업을 할애함에 따라, 진행하려던 사이드와 포스팅에 신경을 거의 쓰지 못했다. 리뉴얼 작업이 마무리되는 현시점, 여유를 찾음과 동시에 포스팅을 재개하기 위해 주1 알고리즘 부터 시작해보겠다. 🥋 Oooth More!! (Level 3) 🧮 풀이 역시, 카카오 문제답게 매우 어려웠다. 특히, 이진트리를 구현함에 있어 클래스 문법이 많이 취약함을 느꼈다. 모범답안을 통해 풀이법을 학습할뿐만 아니라, Javascript 클래스를 숙달할 수 있는 미니프로젝트를 찾아보려고 한다. 🖇 리뷰 class Node { constructor(id, x, y) {..
-
[CodeKata] 프로그래머스 : 8.22(일), 기둥과 보 설치Algorithm 2021. 8. 22. 18:04
🥋 Oooth More!! (Level 3) 🧮 풀이 * 실패한 풀이이다. 예제코드는 모두 맞췄으나, 실제 문제는 거의다 실패가 발생하였다. const str = (a) => { return a === 0 ? "p" : "b" }; const cmd = (b) => { return b === 1 ? "add" : "remove" }; function solution(n, build_frame) { let ground = Array.from({ length: n+1 }, () => { return new Array(n+1).fill(0) }); let answer = []; const checkCross = (x,y,dir) => { const dirObj = { n: x-1 >= 0 ? ground[x-..
-
[CodeKata] 프로그래머스 : 8.15(일), 광고 삽입Algorithm 2021. 8. 15. 16:45
🥋 Oooth More!! (Level 3) 🧮 풀이 * 실패한 풀이이다. 극소 케이스는 맞았으나, 대부분 실패나 시간초과가 발생했음. function toSec(time) { time = time.split(":"); return Number(time[0] * 3600 + time[1] * 60 + time[2]); } function solution(play_time, adv_time, logs) { function getPlays(start, end, logs) { let play = 0; logSecs.forEach((log) => { if (log[1] end) return; play += (Math.min(log[1], end) - Math.max(log[0..
-
[CodeKata] 프로그래머스 : 8.8(일), 섬 연결하기Algorithm 2021. 8. 11. 21:50
🥋 Oooth More!! (Level 3) : 순위 🧮 풀이 graph의 최소값들만 솎아내는 방법을 시도했으나, 모든 노드의 연결여부를 확인할 수 없어 모범답안을 참고했다. 🖇 리뷰 function solution(n, costs) { let answer = 0, island = [], bridge = [], total = 0; costs.sort((a, b) => a[2] - b[2]); // 비용이 낮은 거 순으로 정렬 island[costs[0][0]] = true; // cost에 제일 앞에 있는 섬 방문 처리 island[costs[0][1]] = true; // bridge[0] = true; // 건설된 다리 하나 지어졋다고 친다. 다리 번호 == costs 번호 answer += cost..
-
[CodeKata] 프로그래머스 : 7.19(월), 여행경로 / 베스트앨범Algorithm 2021. 7. 20. 21:56
🥋 Oooth More!! (Level 3) : 여행경로 🧮 풀이 function sortTickets(list) { return list.sort((a,b) => { return a[1] < b[1] ? -1 : 1; }) } function solution(tickets) { let answer; function dfs(acc, res) { if (res.length === 0) { answer = [answer, acc].sort().shift(); return; } const now = acc[acc.length-1]; for (let i in res) { const [d, a] = res[i]; if (d === now) { const copiedRes = [...res]; const [next..