diff --git "a/\353\217\204\354\234\244/week5/[Lv 1] MemoryScore.js" "b/\353\217\204\354\234\244/week5/[Lv 1] MemoryScore.js" new file mode 100644 index 0000000..0d2a3ad --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 1] MemoryScore.js" @@ -0,0 +1,15 @@ +// Lv 1. 추억 점수 - 연습문제 +function solution(name, yearning, photo) { + let missingScore = []; + let tmpScr = 0; + for (let i = 0; i < photo.length; i++) { + tmpScr = 0; + for (let j = 0; j < photo[i].length; j++) { + if (name.includes(photo[i][j])) { + tmpScr += yearning[name.indexOf(photo[i][j])]; + } + } + missingScore.push(tmpScr); + } + return missingScore; +} diff --git "a/\353\217\204\354\234\244/week5/[Lv 1] SecretCode.js" "b/\353\217\204\354\234\244/week5/[Lv 1] SecretCode.js" new file mode 100644 index 0000000..518e86d --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 1] SecretCode.js" @@ -0,0 +1,13 @@ +// Lv 1. 둘만의 암호 - 연습문제 +function solution(s, skip, index) { + let answer = ""; + const alphArr = Array(26) + .fill() + .map((v, i) => String.fromCharCode(i + 97)) + .filter((elm) => !skip.includes(elm)); + s.split("").forEach((elm, idx) => { + let newIdx = (alphArr.indexOf(elm) + index) % alphArr.length; + answer += alphArr[newIdx]; + }); + return answer; +} diff --git "a/\353\217\204\354\234\244/week5/[Lv 1] Test.js" "b/\353\217\204\354\234\244/week5/[Lv 1] Test.js" new file mode 100644 index 0000000..d6b0747 --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 1] Test.js" @@ -0,0 +1,23 @@ +// Lv 1. 모의고사 - 완전탐색 +function solution(answers) { + const sol1 = [1, 2, 3, 4, 5], + sol2 = [2, 1, 2, 3, 2, 4, 2, 5], + sol3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; + let cnt1 = 0, + cnt2 = 0, + cnt3 = 0; + const answer = []; + + answers.forEach((elm, idx) => { + if (sol1[idx % sol1.length] === elm) cnt1++; + if (sol2[idx % sol2.length] === elm) cnt2++; + if (sol3[idx % sol3.length] === elm) cnt3++; + }); + + const max = Math.max(cnt1, cnt2, cnt3); + if (cnt1 === max) answer.push(1); + if (cnt2 === max) answer.push(2); + if (cnt3 === max) answer.push(3); + + return answer; +} diff --git "a/\353\217\204\354\234\244/week5/[Lv 2] Fibonacci.js" "b/\353\217\204\354\234\244/week5/[Lv 2] Fibonacci.js" new file mode 100644 index 0000000..b86ff59 --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 2] Fibonacci.js" @@ -0,0 +1,13 @@ +// Lv 2. 피보나치 수 - 연습문제 +function solution(n) { + let add1 = 0, + add2 = 1, + sum = 0, + mod = 0; + for (let i = 2; i <= n; i++) { + sum = (add1 + add2) % 1234567; + add1 = add2; + add2 = sum; + } + return sum; +} diff --git "a/\353\217\204\354\234\244/week5/[Lv 2] NextBigNumber.js" "b/\353\217\204\354\234\244/week5/[Lv 2] NextBigNumber.js" new file mode 100644 index 0000000..fb322cd --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 2] NextBigNumber.js" @@ -0,0 +1,22 @@ +// Lv 2. 다음 큰 숫자 - 연습문제 +function solution(n) { + const findCnt = (num) => { + return num + .toString(2) + .split("") + .filter((elm) => elm === "1").length; + }; + + let start = n + 1; + let oneCnt = 0; + + while (true) { + oneCnt = findCnt(start); + if (oneCnt === findCnt(n)) { + break; + } + start++; + } + + return start; +} diff --git "a/\353\217\204\354\234\244/week6/[Lv 1] FoodFight.js" "b/\353\217\204\354\234\244/week6/[Lv 1] FoodFight.js" new file mode 100644 index 0000000..55d2004 --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 1] FoodFight.js" @@ -0,0 +1,8 @@ +// Lv 1. 푸드 파이트 대회 - 연습문제 +function solution(food) { + let perFood = []; + for (let i = 1; i < food.length; i++) { + perFood.push(i.toString().repeat(Math.floor(food[i] / 2))); + } + return perFood.join("") + "0" + perFood.reverse().join(""); +} diff --git "a/\353\217\204\354\234\244/week6/[Lv 1] Noncompletion.js" "b/\353\217\204\354\234\244/week6/[Lv 1] Noncompletion.js" new file mode 100644 index 0000000..494f94b --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 1] Noncompletion.js" @@ -0,0 +1,30 @@ +// Lv 1. 완주하지 못한 선수 - 해시 +function solution(participant, completion) { + let answer = ""; + + participant.sort(); + completion.sort(); + + for (let i = 0; i < participant.length; i++) { + if (participant[i] !== completion[i]) { + answer = participant[i]; + break; + } + } + return answer; +} + +// 첫번째 풀이 - 효율성 검사 통과 X +// function solution(participant, completion){ +// let idx = -1; +// let answer = ""; +// participant.forEach((elm)=> { +// if(completion.includes(elm)){ +// idx = completion.indexOf(elm); +// completion.splice(idx, 1); +// }else{ +// answer = elm; +// } +// }) +// return answer; +// } diff --git "a/\353\217\204\354\234\244/week6/[Lv 1] Paint.js" "b/\353\217\204\354\234\244/week6/[Lv 1] Paint.js" new file mode 100644 index 0000000..6b550d8 --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 1] Paint.js" @@ -0,0 +1,12 @@ +// Lv 1. 덧칠하기 - 연습문제 +function solution(n, m, section) { + let paint = 0, + answer = 0; + section.forEach((elm) => { + if (elm > paint) { + paint = elm + (m - 1); + answer++; + } + }); + return answer; +} diff --git "a/\353\217\204\354\234\244/week6/[Lv 1] Ranking .js" "b/\353\217\204\354\234\244/week6/[Lv 1] Ranking .js" new file mode 100644 index 0000000..1313ad2 --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 1] Ranking .js" @@ -0,0 +1,12 @@ +// Lv 1. 명예의 전당 (1) - 연습문제 +function solution(k, score) { + let rank = [], + answer = []; + + for (let i = 0; i < score.length; i++) { + rank.push(score[i]); + rank = rank.sort((a, b) => b - a).slice(0, k); + answer.push(Math.min(...rank)); + } + return answer; +} diff --git "a/\353\217\204\354\234\244/week6/[Lv 2] Bracket.js" "b/\353\217\204\354\234\244/week6/[Lv 2] Bracket.js" new file mode 100644 index 0000000..5c5f379 --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 2] Bracket.js" @@ -0,0 +1,25 @@ +// Lv 2. 올바른 괄호 - 스택/큐 +function solution(s) { + const stack = []; + + for (let i = 0; i < s.length; i++) { + stack[stack.length - 1] === "(" && s[i] === ")" + ? stack.pop() + : stack.push(s[i]); + } + + return stack.length === 0 ? true : false; +} + +/* +효율성 검사 통과 풀이 +function solution(s){ + const stack = []; + + for(let i = 0; i < s.length; i++){ + (stack[stack.length-1] === "(" && s[i] === ")") ? stack.pop() : stack.push(s[i]); + + } + + return !stack.length; +} */ diff --git "a/\353\217\204\354\234\244/week6/[Lv 2] PairEliminate.js" "b/\353\217\204\354\234\244/week6/[Lv 2] PairEliminate.js" new file mode 100644 index 0000000..401608e --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 2] PairEliminate.js" @@ -0,0 +1,13 @@ +// Lv 2. 짝지어 제거하기 - 2017 탑스타운 +function solution(s) { + //stack 사용 + const stack = []; + for (let i = 0; i < s.length; i++) { + if (stack[stack.length - 1] !== s[i]) { + stack.push(s[i]); + } else { + stack.pop(); + } + } + return stack.length === 0 ? 1 : 0; +} diff --git "a/\353\217\204\354\234\244/week7/[Lv 1] BunchOfCared.js" "b/\353\217\204\354\234\244/week7/[Lv 1] BunchOfCared.js" new file mode 100644 index 0000000..d527974 --- /dev/null +++ "b/\353\217\204\354\234\244/week7/[Lv 1] BunchOfCared.js" @@ -0,0 +1,16 @@ +// Lv 1. 카드 뭉치 - 연습문제 +function solution(cards1, cards2, goal) { + let answer = ""; + for (let i = 0; i < goal.length; i++) { + if (cards1[0] === goal[i]) { + cards1.shift(); + } else if (cards2[0] === goal[i]) { + cards2.shift(); + } else { + answer = "No"; + break; + } + answer = "Yes"; + } + return answer; +} diff --git "a/\353\217\204\354\234\244/week7/[Lv 1] Clothes.js" "b/\353\217\204\354\234\244/week7/[Lv 1] Clothes.js" new file mode 100644 index 0000000..2612d38 --- /dev/null +++ "b/\353\217\204\354\234\244/week7/[Lv 1] Clothes.js" @@ -0,0 +1,29 @@ +// Lv 1. 체육복 - 탐욕법(Greedy) +function solution(n, lost, reserve) { + //가져왔는데 도난당한 경우 (reserve와 lost에서 모두 제거) + let newReserve = reserve + .filter((elm) => { + return !lost.includes(elm); + }) + .sort((a, b) => a - b); + + let newLost = lost + .filter((elm) => { + return !reserve.includes(elm); + }) + .sort((a, b) => a - b); + + //answer의 초기값: 총 n명 중 가져오지 않은 사람(가져왔는데 도난당한 사람 제외) + let answer = n - newLost.length; + + newLost.forEach((elm) => { + if (newReserve && newReserve.includes(elm - 1)) { + answer++; + newReserve = newReserve.filter((res) => res !== elm - 1); + } else if (newReserve && newReserve.includes(elm + 1)) { + answer++; + newReserve = newReserve.filter((res) => res !== elm + 1); + } + }); + return answer; +} diff --git "a/\353\217\204\354\234\244/week8/[Lv 1] Babbling(2).js" "b/\353\217\204\354\234\244/week8/[Lv 1] Babbling(2).js" new file mode 100644 index 0000000..1046db0 --- /dev/null +++ "b/\353\217\204\354\234\244/week8/[Lv 1] Babbling(2).js" @@ -0,0 +1,18 @@ +// Lv 1. 옹알이(2) - 연습문제 +function solution(babbling) { + const babblingList = ["aya", "ye", "woo", "ma"]; + let count = 0; + + for (bab of babbling) { + for (word of babblingList) { + if (bab.includes(word.repeat(2))) { + break; + } + bab = bab.split(word).join(" "); + } + if (bab.split(" ").join("").length === 0) { + count++; + } + } + return count; +} diff --git "a/\353\217\204\354\234\244/week8/[Lv 1] NumberPair.js" "b/\353\217\204\354\234\244/week8/[Lv 1] NumberPair.js" new file mode 100644 index 0000000..8db9e4a --- /dev/null +++ "b/\353\217\204\354\234\244/week8/[Lv 1] NumberPair.js" @@ -0,0 +1,27 @@ +// Lv 1. 숫자 짝꿍 - 연습문제 -> 11 ~ 15 시간초과 +function solution(X, Y) { + const XArr = X.toString().split(""); + const YArr = Y.toString().split(""); + const maxLen = Math.max(XArr.length, YArr.length); + const answer = []; + + for (let i = 0; i < maxLen; i++) { + const tmp = XArr[i]; + if (YArr.includes(tmp)) { + answer.push(tmp); + YArr.splice(YArr.indexOf(tmp), 1); + } + } + + const answerSet = new Set(answer); + + if (answer.length === 0) { + return "-1"; + } + if (answerSet.size === 1 && answerSet.has("0")) { + console.log("here"); + return "0"; + } + + return answer.sort((a, b) => b - a).join(""); +} diff --git "a/\353\217\204\354\234\244/week8/[Lv 1] Pokemon.js" "b/\353\217\204\354\234\244/week8/[Lv 1] Pokemon.js" new file mode 100644 index 0000000..9bc7746 --- /dev/null +++ "b/\353\217\204\354\234\244/week8/[Lv 1] Pokemon.js" @@ -0,0 +1,7 @@ +// Lv 1. 포켓몬 - 해시 +function solution(nums) { + const numSets = new Set(nums); + const maxCount = Math.floor(nums.length / 2); + + return numSets.size > maxCount ? maxCount : numSets.size; +} diff --git "a/\353\217\204\354\234\244/week8/[Lv 1] SelectAndAdd.js" "b/\353\217\204\354\234\244/week8/[Lv 1] SelectAndAdd.js" new file mode 100644 index 0000000..73211ce --- /dev/null +++ "b/\353\217\204\354\234\244/week8/[Lv 1] SelectAndAdd.js" @@ -0,0 +1,14 @@ +// Lv 1. 두 개 뽑아서 더하기 +function solution(numbers) { + const answer = []; + for (let i = 0; i < numbers.length; i++) { + for (let j = i + 1; j < numbers.length; j++) { + if (!answer.includes(numbers[i] + numbers[j])) { + answer.push(numbers[i] + numbers[j]); + } else { + continue; + } + } + } + return answer.sort((a, b) => a - b); +} diff --git "a/\353\217\204\354\234\244/week8/[Lv 2] Jump&Teleportation.js" "b/\353\217\204\354\234\244/week8/[Lv 2] Jump&Teleportation.js" new file mode 100644 index 0000000..dd3182a --- /dev/null +++ "b/\353\217\204\354\234\244/week8/[Lv 2] Jump&Teleportation.js" @@ -0,0 +1,14 @@ +// Lv 2. 점프와 순간이동 - Summer/Winter Coding(~2018) +function solution(n) { + let use = 0; + + while (n !== 0) { + if (n % 2 === 0) { + n = n / 2; + } else { + n--; + use++; + } + } + return use; +} diff --git "a/\353\217\204\354\234\244/week8/[Lv 2] RescueBoat.js" "b/\353\217\204\354\234\244/week8/[Lv 2] RescueBoat.js" new file mode 100644 index 0000000..e00c84d --- /dev/null +++ "b/\353\217\204\354\234\244/week8/[Lv 2] RescueBoat.js" @@ -0,0 +1,12 @@ +// Lv 2. 구명보트 - 탐욕법(Greedy) +function solution(people, limit) { + let count = 0; + let j = people.length - 1; + people.sort((a, b) => b - a); + + for (let i = 0; i <= j; i++) { + people[i] + people[j] <= limit && j--; + count++; + } + return count; +}