diff --git "a/\354\227\260\354\204\234/week5/level 1/\352\260\231\354\235\200\354\210\253\354\236\220\353\212\224\354\213\253\354\226\264.js" "b/\354\227\260\354\204\234/week5/level 1/\352\260\231\354\235\200\354\210\253\354\236\220\353\212\224\354\213\253\354\226\264.js" new file mode 100644 index 0000000..c941ee2 --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 1/\352\260\231\354\235\200\354\210\253\354\236\220\353\212\224\354\213\253\354\226\264.js" @@ -0,0 +1,10 @@ +function solution(arr) { + var answer = []; + for (let i = 0; i < arr.length; i++) { + if (arr[i] !== arr[i + 1]) { + answer.push(arr[i]); + } + } + + return answer; +} diff --git "a/\354\227\260\354\204\234/week5/level 1/\353\252\205\354\230\210\354\235\230\354\240\204\353\213\271.js" "b/\354\227\260\354\204\234/week5/level 1/\353\252\205\354\230\210\354\235\230\354\240\204\353\213\271.js" new file mode 100644 index 0000000..322fbe5 --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 1/\353\252\205\354\230\210\354\235\230\354\240\204\353\213\271.js" @@ -0,0 +1,13 @@ +function solution(k, score) { + const scoreStack = []; + return score.map((s, idx) => { + // 값을 넣고 내림차순 정렬 + scoreStack.push(s); + scoreStack.sort((a, b) => b - a); + // k보다 넘쳤을 때 순위가 낮은 점수 제외 + if (scoreStack.length > k) { + scoreStack.pop(); + } + return scoreStack[scoreStack.length - 1]; + }); +} diff --git "a/\354\227\260\354\204\234/week5/level 1/\353\266\200\354\241\261\355\225\234\352\270\210\354\225\241\352\263\204\354\202\260.js" "b/\354\227\260\354\204\234/week5/level 1/\353\266\200\354\241\261\355\225\234\352\270\210\354\225\241\352\263\204\354\202\260.js" new file mode 100644 index 0000000..569ce12 --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 1/\353\266\200\354\241\261\355\225\234\352\270\210\354\225\241\352\263\204\354\202\260.js" @@ -0,0 +1,6 @@ +//가우스 공식 (등차수열의 합 = (첫항 + 마지막항) * (항의 개수) / 2) +function solution(price, money, count) { + //가우스 공식 활용 부분 + const tmp = (price * (count + 1) * count) / 2 - money; + return tmp > 0 ? tmp : 0; +} diff --git "a/\354\227\260\354\204\234/week5/level 1/\354\230\210\354\202\260.js" "b/\354\227\260\354\204\234/week5/level 1/\354\230\210\354\202\260.js" new file mode 100644 index 0000000..8bf2634 --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 1/\354\230\210\354\202\260.js" @@ -0,0 +1,7 @@ +function solution(d, budget) { + return d + .sort((a, b) => a - b) + .reduce((count, price) => { + return count + Number((budget -= price) >= 0); + }, 0); +} diff --git "a/\354\227\260\354\204\234/week5/level 1/\354\275\234\353\235\274\353\254\270\354\240\234.js" "b/\354\227\260\354\204\234/week5/level 1/\354\275\234\353\235\274\353\254\270\354\240\234.js" new file mode 100644 index 0000000..f51f461 --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 1/\354\275\234\353\235\274\353\254\270\354\240\234.js" @@ -0,0 +1,11 @@ +function solution(a, b, n) { + let total = 0; + let now = 0; + + while (n >= a) { + now = Math.floor(n / a) * b; + total += now; + n = now + (n % a); + } + return total; +} diff --git "a/\354\227\260\354\204\234/week5/level 2/N\352\260\234\354\235\230\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230.js" "b/\354\227\260\354\204\234/week5/level 2/N\352\260\234\354\235\230\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230.js" new file mode 100644 index 0000000..f47f57d --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 2/N\352\260\234\354\235\230\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230.js" @@ -0,0 +1,9 @@ +function solution(arr) { + // 유클리드호제법으로 최대공약수 구하기 + const gcd = (a, b) => { + return a % b ? gcd(b, a % b) : b; + }; + + // 최대공배수는 두 수의 곱 / 최대공약수 + return arr.reduce((a, b) => (a * b) / gcd(a, b)); +} diff --git "a/\354\227\260\354\204\234/week5/level 2/\352\264\204\355\230\270\355\232\214\354\240\204\355\225\230\352\270\260.js" "b/\354\227\260\354\204\234/week5/level 2/\352\264\204\355\230\270\355\232\214\354\240\204\355\225\230\352\270\260.js" new file mode 100644 index 0000000..0b5a6fa --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 2/\352\264\204\355\230\270\355\232\214\354\240\204\355\225\230\352\270\260.js" @@ -0,0 +1,29 @@ +function solution(s) { + if (s.length % 2 === 1) return 0; + + let answer = 0; + const correctSet = { + "}": "{", + "]": "[", + ")": "(", + }; + + for (let i = 0; i < s.length; i++) { + const stack = []; + const rotate = s.slice(i) + s.slice(0, i); + let flag = true; + rotate.split("").forEach((target) => { + if (target === "{" || target === "[" || target === "(") { + stack.push(target); + } else { + if (stack.pop() !== correctSet[target]) { + flag = false; + return; + } + } + }); + + if (flag) answer++; + } + return answer; +} diff --git "a/\354\227\260\354\204\234/week5/level 2/\354\235\230\354\203\201.js" "b/\354\227\260\354\204\234/week5/level 2/\354\235\230\354\203\201.js" new file mode 100644 index 0000000..2750cb6 --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 2/\354\235\230\354\203\201.js" @@ -0,0 +1,19 @@ +function solution(clothes) { + const map = new Map(); //해시 자료구조 구현을 위한 Map 객체 생성 + + let cnt = 1; + + for (let [cloth, type] of clothes) { + if (map.has(type)) { + map.set(type, map.get(type) + 1); + } else { + map.set(type, 1); + } + } + + for (let i of map.values()) { + cnt *= i + 1; + } + + return cnt - 1; +} diff --git "a/\354\227\260\354\204\234/week5/level 2/\354\241\260\354\235\264\354\212\244\355\213\261.js" "b/\354\227\260\354\204\234/week5/level 2/\354\241\260\354\235\264\354\212\244\355\213\261.js" new file mode 100644 index 0000000..6cddd7d --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 2/\354\241\260\354\235\264\354\212\244\355\213\261.js" @@ -0,0 +1,22 @@ +function solution(name) { + let answer = 0; + let min_move = name.length - 1; + + [...name].map((n, i) => { + answer += Math.min(n.charCodeAt() - 65, 91 - n.charCodeAt()); + let idx = i + 1; + + // 연속되는 A의 개수 count + while (idx < name.length && name[idx] === "A") { + idx++; + } + + min_move = Math.min( + min_move, + i * 2 + name.length - idx, + i + 2 * (name.length - idx) + ); + }); + + return answer + min_move; +} diff --git "a/\354\227\260\354\204\234/week5/level 2/\355\225\240\354\235\270\355\226\211\354\202\254.js" "b/\354\227\260\354\204\234/week5/level 2/\355\225\240\354\235\270\355\226\211\354\202\254.js" new file mode 100644 index 0000000..19713e1 --- /dev/null +++ "b/\354\227\260\354\204\234/week5/level 2/\355\225\240\354\235\270\355\226\211\354\202\254.js" @@ -0,0 +1,22 @@ +function solution(want, number, discount) { + var answer = 0; + + // Map 자료구조로 할인 품목과 원하는 품목 일치 확인 로직 + 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; +}