Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion Programmers/Level1/159994_카드_뭉치.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,25 @@
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/159994
*/

function solution(cards1, cards2, goal) {
// ANCHOR - 2025.12.04 풀이
function solution2(cards1, cards2, goal) {
let front1 = 0;
let front2 = 0;
let len1 = cards1.length;
let len2 = cards2.length;

for (let idx = 0; idx < goal.length; idx++) {
const target = goal[idx];
if (front1 < len1 && cards1[front1] === target) front1++;
else if (front2 < len2 && cards2[front2] === target) front2++;
else return "No";
}

return "Yes";
}

// ANCHOR - 2025.10.05 풀이
function solution1(cards1, cards2, goal) {
let idx1 = 0;
let idx2 = 0;
let goalIdx = 0;
Expand Down
28 changes: 27 additions & 1 deletion Programmers/Level1/42576_완주하지_못한_선수.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,33 @@
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42576
*/

function solution(participant, completion) {
// ANCHOR - 2025.12.04 풀이
function solution2(participant, completion) {
// 참여자 맵 초기화
const participantMap = new Map(); // key: 이름, value: 해당하는 선수 수
for (const name of participant) {
if (participantMap.has(name)) {
participantMap.set(name, participantMap.get(name) + 1);
} else {
participantMap.set(name, 1);
}
}

// 완주자 확인
for (const name of completion) {
participantMap.set(name, participantMap.get(name) - 1);
}

// 완주하지 못한 선수 학인
for (const [name, count] of participantMap) {
if (count > 0) return name;
}

return ""; // NEVER
}

// ANCHOR - 2025.10.06 풀이
function solution1(participant, completion) {
// 1. completion으로 map 만들기
const map = new Map();
for (const person of completion) {
Expand Down
60 changes: 59 additions & 1 deletion Programmers/Level2/42586_기능개발.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,65 @@
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42586
*/

function solution(progresses, speeds) {
// ANCHOR - 2025.12.04 풀이 (리뷰 참고)
// https://github.com/yoouyeon/algorithm_study/pull/16#issuecomment-3610881111
function solution2_1(progresses, speeds) {
// 각 작업이 완료되기까지 필요한 일 수 계산
const daysNeeded = progresses.map((progress, index) =>
Math.ceil((100 - progress) / speeds[index])
);
const answer = [];
let maxDay = daysNeeded[0];
let count = 1;

for (let idx = 1; idx < daysNeeded.length; idx++) {
if (daysNeeded[idx] <= maxDay) {
// 현재 작업이 앞선 작업보다 빨리 끝난다면 함께 배포
count++;
} else {
// 새로운 배포 그룹 시작
answer.push(count);
maxDay = daysNeeded[idx];
count = 1;
}
}

// 마지막 그룹 추가
answer.push(count);

return answer;
}

// ANCHOR - 2025.12.04 풀이
function solution2(progresses, speeds) {
let answer = [];
let currentDay = 1;
let deployCount = 0;

while (deployCount < progresses.length) {
let completedCount = deployCount;
// 작업
while (completedCount < progresses.length) {
if (
progresses[completedCount] + speeds[completedCount] * currentDay <
100
)
break;
completedCount++;
}
// 배포
if (deployCount !== completedCount) {
answer.push(completedCount - deployCount);
deployCount = completedCount;
}
currentDay++;
}

return answer;
}

// ANCHOR - 2025.10.05 풀이
function solution1(progresses, speeds) {
let answer = [];
let front = 0; // 현 시점 배포되어야 하는 작업
let day = 0;
Expand Down