본문 바로가기

전체 글181

[우선순위큐] 프로세스 (앞에서 빼고 뒤에 넣고) https://school.programmers.co.kr/learn/courses/30/lessons/42587 우선순위 높은순 실행 숫자가 큰 1-9 숫자가 클수록 우선순위가 높다 location = index queue앞에서 빼고 뒤에 넣고 순회한다 Math.max(...arr) shift remove some 첫번째 풀이(성공) function solution(priorities, location) { var answer = 0; priorities = priorities.map((p, i) => ({priority: p, location: i})); while(priorities.length) { const curr = priorities.shift(); // 현재보다 큰 순위가 없을 때 삭제 .. 2023. 10. 12.
[프로그래머스] 다리를 지나는 트럭 JS (큐) https://school.programmers.co.kr/learn/courses/30/lessons/42583 처음에 문제가 이해가 안 됐다. 몇번의 그림을 그리며 테스트케이스를 이해하려고 노력한 끝에 다리를 건너는데 bridge_length만큼 시간이 걸린다는 것을 깨달았다.. (즉 다리를 bridge_length길이 배열이라고 본다면 1초에 1 인덱스씩 이동한다) 좋다 문제는 이해했는데 어떻게 풀지? 먼저 다리 양쪽으로 들어가고 나오니까 큐를 떠올렸다 큐를 순회하면서 모든 차량을 이동시키는데 필요한 시간을 ++한다. 이 때 탈출조건은 대기하고 있는 트럭이 없고 다리에 건너고 있는 트럭이 없을때까지이다 (= 모든 차량이 통과할때까지) 따라서 while( truck_weights.length || p.. 2023. 10. 12.
[스택] 기능개발 https://school.programmers.co.kr/learn/courses/30/lessons/42586# 첫번째 풀이 (실패) progresses, speeds를 순회하여 각 기능마다 더 필요한 시간을 계산한다 Math.ceil( ( 100-progress ) / speeds ); 필요한 시간 배열을 앞에서부터 순회하며 뒤에 더 많은 시간이 필요할때까지 앞의 시간안에 처리할 수 있는 기능의 합을 구한다 function solution(progresses, speeds) { var answer = []; const days = []; for (let i = 0; i < progresses.length; i++) { days.push(Math.ceil((100-progresses[i])/speed.. 2023. 10. 11.
[순서 확인 shift] 스킬트리 https://school.programmers.co.kr/learn/courses/30/lessons/49993 첫번째 방법 (성공) 필요한 스킬인지 빨리 탐색하려고 해쉬로 필요한 스킬을 정리 {skill이름: 번호} 각 트리마다 첫 스킬이 첫번째로 필요한 스킬이 아니면 다음 트리로 넘어간다 첫 스킬이 첫번째로 필요한 스킬이지만 다음 스킬이 순서가 틀려도 다음 트리로 넘어간다 여기서 순서가 맞는지 확인하는 법은 hash[전 스킬] +1 = hash[현 스킬] 이면 순서가 맞다. 이런식으로 전체트리를 순회한다. function solution(skill, skill_trees) { var answer = 0; let queue = []; const obj = {}; const firstSkill = sk.. 2023. 10. 11.
[프로그래머스 lv2] 두 큐 합 같게 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/118667 첫번째 풀이 (성공) 탈출조건, 시간초과를 어떻게 세울지 고민했다. 탈출조건 먼저 탈출조건은 두 큐의 합이 같거나 최대이동 횟수를 넘었을 때다 여기서 최대이동 횟수는 두 큐의 길이가 같으므로 queue1.length*2로 설정했다. 최대이동횟수 이상 이동하게 되면 -1을 리턴한다. 시간초과 shift의 시간복잡도는 O(n)으로 시간초과가 난다 따라서 shift를 사용하지 않고 shift 할 위치는 인덱스로 기억하고 push만 한다. 두 개의 큐의 합이 홀수이면 -1 리턴한다 각 큐의 shift할 인덱스 변수를 0으로 설정한다 각 큐의 합이 같거나 최대이동 횟수 전까지 두 큐의 합을 비교해 .. 2023. 10. 10.
[프로그래머스] 디펜스 게임 https://school.programmers.co.kr/learn/courses/30/lessons/142085 문제요점n명의 병사적이 더 많으면 게임 종료무적권: 병사소모 없이 한 라운드를 막을 수 있음. k개최대 몇 라운드까지1,000,000,000 => logN DFS 풀이 (시간초과)초기에 dfs를 통해 무적권을 사용하는 경우/ 사용하지 않는 경우르 모두 탐색하는 방법을 생각했는데 N이 너무 커서 시간초과가 났다.    // 무적권을 쓸지 말지 2가지 경우function solution(n, k, enemy) { var answer = 0; function dfs(index, n, k) { // 적을 다 막았거나 더 이상 적을 막을 수 없으면 게임.. 2023. 10. 10.