diff --git a/src/do02reen24/Review/additional-learning.md b/src/do02reen24/Review/additional-learning.md new file mode 100644 index 0000000..8e0a380 --- /dev/null +++ b/src/do02reen24/Review/additional-learning.md @@ -0,0 +1,24 @@ +# 프로그래머스 추가학습 + +# 난이도 1 + +## 모의고사 42840 + +# 난이도 2 + +## 기능개발 42586 + +- 처음에 실수로 반올림을 하여 결과가 틀렸었다. 함수를 올림으로 고쳐주어 해결할 수 있었다. + +## 다리를 지나는 트럭 42583 + +- 이중 배열로도 가능했지만 가독성을 향상시키기 위해 class로 구현하여 풀었다. + +## 스킬트리 49993 + +- map을 활용하여 사전 스킬들을 기록해주고 확인하였다. +- 얕은 복사의 문제가 있어 `JSON.parse(JSON.stringify(arr))` 를 통해 깊은 복사를 처리해주었다. + +## 두 개 뽑아서 더하기 68644 + +- object를 선언해서 해결하였다. 그러나 set을 써서 문제를 해결하였으면 더 쉬웠을 것 같다. set의 존재를 계속 까먹는데 잘 기억하자!! diff --git a/src/do02reen24/brute-force/programmers_42840.js b/src/do02reen24/brute-force/programmers_42840.js new file mode 100644 index 0000000..07a02a3 --- /dev/null +++ b/src/do02reen24/brute-force/programmers_42840.js @@ -0,0 +1,25 @@ +function getScore(answers, userAnswers) { + const userLength = userAnswers.length; + return answers.reduce((sum, value, index) => { + if (value === userAnswers[index % userLength]) return sum + 1; + return sum; + }, 0); +} + +function solution(answers) { + const answer = []; + const ans1 = [1, 2, 3, 4, 5]; + const ans2 = [2, 1, 2, 3, 2, 4, 2, 5]; + const ans3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; + + const score1 = getScore(answers, ans1); + const score2 = getScore(answers, ans2); + const score3 = getScore(answers, ans3); + + const maxScore = Math.max(score1, score2, score3); + + if (maxScore === score1) answer.push(1); + if (maxScore === score2) answer.push(2); + if (maxScore === score3) answer.push(3); + return answer; +} diff --git a/src/do02reen24/data-structure/programmers_42583.js b/src/do02reen24/data-structure/programmers_42583.js new file mode 100644 index 0000000..ddf0b92 --- /dev/null +++ b/src/do02reen24/data-structure/programmers_42583.js @@ -0,0 +1,35 @@ +class Bridge { + constructor(weight, remain) { + this.weight = weight; + this.remain = remain; + } + + getRemain() { + return this.remain; + } + + subRemain() { + this.remain--; + } +} + +function sumBridge(bridge) { + return bridge.reduce((sum, now) => (sum += now.weight), 0); +} + +function solution(bridge_length, weight, truck_weights) { + let time = 1; + let index = 0; + const bridges = []; + while (index < truck_weights.length) { + const remain = weight - sumBridge(bridges); + if (remain >= truck_weights[index]) { + bridges.push(new Bridge(truck_weights[index], bridge_length)); + index++; + } + time++; + bridges.forEach((bridge) => bridge.subRemain()); + if (bridges[0].getRemain() === 0) bridges.shift(); + } + return time + bridge_length - 1; +} diff --git a/src/do02reen24/data-structure/programmers_42586.js b/src/do02reen24/data-structure/programmers_42586.js new file mode 100644 index 0000000..872e879 --- /dev/null +++ b/src/do02reen24/data-structure/programmers_42586.js @@ -0,0 +1,20 @@ +function solution(progresses, speeds) { + let answer = []; + const finishDay = progresses.map((progress, index) => + Math.ceil((100 - progress) / speeds[index]) + ); + let max; + let count = 0; + + finishDay.forEach((element) => { + if (!max) max = element; + else if (max < element) { + answer.push(count); + count = 0; + max = element; + } + count++; + }); + answer.push(count); + return answer; +} diff --git a/src/do02reen24/data-structure/programmers_49993.js b/src/do02reen24/data-structure/programmers_49993.js new file mode 100644 index 0000000..bcfec1d --- /dev/null +++ b/src/do02reen24/data-structure/programmers_49993.js @@ -0,0 +1,35 @@ +function splitSkill(skill) { + return skill.split(''); +} + +function getBeforeSkill(skills) { + const beforeSkill = {}; + skills.reduce((arr, now) => { + beforeSkill[now] = JSON.parse(JSON.stringify(arr)); + arr.push(now); + return arr; + }, []); + return beforeSkill; +} + +function isValid(tree, beforeSkill) { + const study = {}; + for (let skill of tree) { + study[skill] = true; + if (!beforeSkill[skill]) continue; + for (let bSkill of beforeSkill[skill]) { + if (!study[bSkill]) return 0; + } + } + return 1; +} + +function solution(skill, skill_trees) { + const beforeSkill = getBeforeSkill(splitSkill(skill)); + return skill_trees.reduce( + (sum, tree) => sum + isValid(splitSkill(tree), beforeSkill), + 0 + ); +} + +console.log(solution('CBD', ['BACDE', 'CBADF', 'AECB', 'BDA'])); diff --git a/src/do02reen24/etc/programmers_68644.js b/src/do02reen24/etc/programmers_68644.js new file mode 100644 index 0000000..af25033 --- /dev/null +++ b/src/do02reen24/etc/programmers_68644.js @@ -0,0 +1,21 @@ +function sortAsc(a, b) { + return a - b; +} + +function getKeys(dict) { + const keys = []; + for (const key in dict) keys.push(Number(key)); + return keys.sort(sortAsc); +} + +function solution(numbers) { + const dict = {}; + for (let a = 0; a < numbers.length; a++) { + for (let b = a + 1; b < numbers.length; b++) { + const sum = numbers[a] + numbers[b]; + dict[sum] = true; + } + } + + return getKeys(dict); +}