From 02fae8acbe01d1b2ab95f21faacce467b0d70e9c Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Thu, 21 Jan 2021 17:02:38 +0900 Subject: [PATCH 1/5] =?UTF-8?q?solve=20:=20programmers=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/additional-learning.md | 5 +++++ .../data-structure/programmers_42586.js | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/do02reen24/Review/additional-learning.md create mode 100644 src/do02reen24/data-structure/programmers_42586.js diff --git a/src/do02reen24/Review/additional-learning.md b/src/do02reen24/Review/additional-learning.md new file mode 100644 index 0000000..f721418 --- /dev/null +++ b/src/do02reen24/Review/additional-learning.md @@ -0,0 +1,5 @@ +# 추가학습 + +## programmers 기능개발 42586 + +- 처음에 실수로 반올림을 하여 결과가 틀렸었다. 함수를 올림으로 고쳐주어 해결할 수 있었다. 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; +} From 15e82a90e029c14aaa6c0055d11f743152c98680 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Thu, 21 Jan 2021 17:35:23 +0900 Subject: [PATCH 2/5] =?UTF-8?q?solve=20:=20programmers=20=EB=8B=A4?= =?UTF-8?q?=EB=A6=AC=EB=A5=BC=20=EC=A7=80=EB=82=98=EB=8A=94=20=ED=8A=B8?= =?UTF-8?q?=EB=9F=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/additional-learning.md | 4 +++ .../data-structure/programmers_42583.js | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/do02reen24/data-structure/programmers_42583.js diff --git a/src/do02reen24/Review/additional-learning.md b/src/do02reen24/Review/additional-learning.md index f721418..95044d9 100644 --- a/src/do02reen24/Review/additional-learning.md +++ b/src/do02reen24/Review/additional-learning.md @@ -3,3 +3,7 @@ ## programmers 기능개발 42586 - 처음에 실수로 반올림을 하여 결과가 틀렸었다. 함수를 올림으로 고쳐주어 해결할 수 있었다. + +## programmers 다리를 지나는 트럭 42583 + +- 이중 배열로도 가능했지만 가독성을 향상시키기 위해 class로 구현하여 풀었다. 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; +} From 287868a0d6c2f9d4fcdee38dd00044c0962a5aa5 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Thu, 21 Jan 2021 22:03:49 +0900 Subject: [PATCH 3/5] =?UTF-8?q?solve=20:=20programmers=20=EC=8A=A4?= =?UTF-8?q?=ED=82=AC=ED=8A=B8=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/additional-learning.md | 5 +++ .../data-structure/programmers_49993.js | 35 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/do02reen24/data-structure/programmers_49993.js diff --git a/src/do02reen24/Review/additional-learning.md b/src/do02reen24/Review/additional-learning.md index 95044d9..5c71d2f 100644 --- a/src/do02reen24/Review/additional-learning.md +++ b/src/do02reen24/Review/additional-learning.md @@ -7,3 +7,8 @@ ## programmers 다리를 지나는 트럭 42583 - 이중 배열로도 가능했지만 가독성을 향상시키기 위해 class로 구현하여 풀었다. + +## programmers 스킬트리 49993 + +- map을 활용하여 사전 스킬들을 기록해주고 확인하였다. +- 얕은 복사의 문제가 있어 `JSON.parse(JSON.stringify(arr))` 를 통해 깊은 복사를 처리해주었다. 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'])); From dd1d7e6d51406b2726b81efb4c73f3fed3f93fb8 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Fri, 22 Jan 2021 15:37:26 +0900 Subject: [PATCH 4/5] =?UTF-8?q?solve=20:=20programmers=20=EB=AA=A8?= =?UTF-8?q?=EC=9D=98=EA=B3=A0=EC=82=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/additional-learning.md | 14 ++++++++--- .../brute-force/programmers_42840.js | 25 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/do02reen24/brute-force/programmers_42840.js diff --git a/src/do02reen24/Review/additional-learning.md b/src/do02reen24/Review/additional-learning.md index 5c71d2f..eed2294 100644 --- a/src/do02reen24/Review/additional-learning.md +++ b/src/do02reen24/Review/additional-learning.md @@ -1,14 +1,20 @@ -# 추가학습 +# 프로그래머스 추가학습 -## programmers 기능개발 42586 +# 난이도 1 + +## 모의고사 42840 + +# 난이도 2 + +## 기능개발 42586 - 처음에 실수로 반올림을 하여 결과가 틀렸었다. 함수를 올림으로 고쳐주어 해결할 수 있었다. -## programmers 다리를 지나는 트럭 42583 +## 다리를 지나는 트럭 42583 - 이중 배열로도 가능했지만 가독성을 향상시키기 위해 class로 구현하여 풀었다. -## programmers 스킬트리 49993 +## 스킬트리 49993 - map을 활용하여 사전 스킬들을 기록해주고 확인하였다. - 얕은 복사의 문제가 있어 `JSON.parse(JSON.stringify(arr))` 를 통해 깊은 복사를 처리해주었다. 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; +} From fd2d41faa266f79bbebbcd68cae3d67a46558937 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Sun, 24 Jan 2021 09:37:07 +0900 Subject: [PATCH 5/5] =?UTF-8?q?solve=20:=20programmers=20=EB=91=90=20?= =?UTF-8?q?=EA=B0=9C=20=EB=BD=91=EC=95=84=EC=84=9C=20=EB=8D=94=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/additional-learning.md | 4 ++++ src/do02reen24/etc/programmers_68644.js | 21 ++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/do02reen24/etc/programmers_68644.js diff --git a/src/do02reen24/Review/additional-learning.md b/src/do02reen24/Review/additional-learning.md index eed2294..8e0a380 100644 --- a/src/do02reen24/Review/additional-learning.md +++ b/src/do02reen24/Review/additional-learning.md @@ -18,3 +18,7 @@ - map을 활용하여 사전 스킬들을 기록해주고 확인하였다. - 얕은 복사의 문제가 있어 `JSON.parse(JSON.stringify(arr))` 를 통해 깊은 복사를 처리해주었다. + +## 두 개 뽑아서 더하기 68644 + +- object를 선언해서 해결하였다. 그러나 set을 써서 문제를 해결하였으면 더 쉬웠을 것 같다. set의 존재를 계속 까먹는데 잘 기억하자!! 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); +}