diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..b93206e Binary files /dev/null and b/.DS_Store differ diff --git "a/\354\227\260\354\204\234/week9/\353\213\244\353\246\254\353\245\274\354\247\200\353\202\230\353\212\224\355\212\270\353\237\255.js" "b/\354\227\260\354\204\234/week9/\353\213\244\353\246\254\353\245\274\354\247\200\353\202\230\353\212\224\355\212\270\353\237\255.js" new file mode 100644 index 0000000..0a16fdf --- /dev/null +++ "b/\354\227\260\354\204\234/week9/\353\213\244\353\246\254\353\245\274\354\247\200\353\202\230\353\212\224\355\212\270\353\237\255.js" @@ -0,0 +1,34 @@ +function solution(bridge_length, weight, truck_weights) { + let answer = 0; + + // 다리 위에 올라간 트럭 배열 + let bridge = new Array(bridge_length).fill(0); + // 현재 시점 다리에 걸린 하중 + let bridge_sum = 0; + + // 1초를 증가시키고, 맨 처음 트럭을 다리에 올린다. + answer++; + bridge.shift(); + bridge_sum += truck_weights[0]; + bridge.push(truck_weights.shift()); + + // 대기 트럭 배열이 남아있거나 다리 위에 올라간 트럭 배열이 남아있는 동안, + while (bridge_sum > 0) { + // 우선 시간이 1초 지났을 때, + answer++; + + // 큐의 맨 앞을 꺼내고, + bridge_sum -= bridge.shift(); + + // 만약 현재 시점 다리 하중에 다음 트럭의 무게를 더해도 다리가 버틸 수 있다면? + if (truck_weights.length > 0 && bridge_sum + truck_weights[0] <= weight) { + // 다음 트럭을 다리 배열에 넣는다. + bridge_sum += truck_weights[0]; + bridge.push(truck_weights.shift()); + } else { + bridge.push(0); + } + } + + return answer; +} diff --git "a/\354\227\260\354\204\234/week9/\354\243\274\354\213\235\352\260\200\352\262\251.js" "b/\354\227\260\354\204\234/week9/\354\243\274\354\213\235\352\260\200\352\262\251.js" new file mode 100644 index 0000000..7a67f89 --- /dev/null +++ "b/\354\227\260\354\204\234/week9/\354\243\274\354\213\235\352\260\200\352\262\251.js" @@ -0,0 +1,21 @@ +function solution(prices) { + let answer = []; + + let idx = 0; + + while (idx < prices.length) { + let time = 0; + for (let i = idx + 1; i < prices.length; i++) { + if (prices[idx] > prices[i]) { + time++; + break; + } else { + time++; + } + } + answer.push(time); + idx++; + } + + return answer; +} diff --git "a/\354\227\260\354\204\234/week9/\354\271\264\355\216\253.js" "b/\354\227\260\354\204\234/week9/\354\271\264\355\216\253.js" new file mode 100644 index 0000000..93f5d7b --- /dev/null +++ "b/\354\227\260\354\204\234/week9/\354\271\264\355\216\253.js" @@ -0,0 +1,12 @@ +function solution(brown, yellow) { + let carpet = brown + yellow; + let w, h; + + for (let h = 3; h < brown; h++) { + if (carpet % h === 0) { + w = carpet / h; + + if ((w - 2) * (h - 2) === yellow) return [w, h]; + } + } +} diff --git "a/\354\227\260\354\204\234/week9/\355\201\260\354\210\230\353\247\214\353\223\244\352\270\260.js" "b/\354\227\260\354\204\234/week9/\355\201\260\354\210\230\353\247\214\353\223\244\352\270\260.js" new file mode 100644 index 0000000..9e85f39 --- /dev/null +++ "b/\354\227\260\354\204\234/week9/\355\201\260\354\210\230\353\247\214\353\223\244\352\270\260.js" @@ -0,0 +1,16 @@ +function solution(number, k) { + let stack = []; + for (let i = 0; i < number.length; i++) { + let value = number[i]; + //마지막 숫자와 현재 숫자를 비교하며 현재 숫자가 더 크면 해당 숫자를 pop + while (k > 0 && stack[stack.length - 1] < value) { + // 현재 숫자보다 큰 수가 나올때까지 최대 k번 반복 + stack.pop(); + k--; + } + stack.push(value); + } + // 모든 숫자를 비교한 후 k가 0보다 크면 남은 k만큼 뒤에서 제거 + stack.splice(stack.length - k, k); + return stack.join(""); +} diff --git "a/\354\227\260\354\204\234/week9/\355\225\240\354\235\270\355\226\211\354\202\254.js" "b/\354\227\260\354\204\234/week9/\355\225\240\354\235\270\355\226\211\354\202\254.js" new file mode 100644 index 0000000..69868de --- /dev/null +++ "b/\354\227\260\354\204\234/week9/\355\225\240\354\235\270\355\226\211\354\202\254.js" @@ -0,0 +1,21 @@ +function solution(want, number, discount) { + var answer = 0; + + const isMatch = (arr) => { + // 할인 품목과 원하는 제품이 일치하는지 확인하는 함수 + var map = new Map(); // 매번 map을 초기화 해준다. + arr.forEach((v) => map.set(v, (map.get(v) || 0) + 1)); // 할인 품목들을 map에 셋팅한다. + for (let i = 0; i < want.length; i++) { + if (map.get(want[i]) !== number[i]) return false; + } // 원하는 품목의 수량과 할인 품목이 일치하지 않으면 false + return true; // 일치하면 true를 리턴한다 + }; + + for (let j = 0; j <= discount.length - 10; j++) { + var arr = discount.slice(j, j + 10); // 10일동안 할인이 되므로(회원 자격 부여) 10개씩 배열을 잘라준다. + if (isMatch(arr)) { + answer++; + } + } + return answer; +}