From a18681d3554acd638d4e09efa45ecd1f6c978908 Mon Sep 17 00:00:00 2001 From: codeisneverodd Date: Tue, 19 Jul 2022 10:53:32 +0900 Subject: [PATCH 01/13] =?UTF-8?q?solution:=20level=202=20/=20=ED=95=98?= =?UTF-8?q?=EB=85=B8=EC=9D=B4=20=ED=83=91=20=ED=92=80=EC=9D=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\354\235\264\354\235\230-\355\203\221.js" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221.js" diff --git "a/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221.js" "b/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221.js" new file mode 100644 index 0000000..5b57c2d --- /dev/null +++ "b/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221.js" @@ -0,0 +1,28 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + return move(1, 3, 2, n); +} +const move = (departure, destination, waypoint, numberOfPlate) => { + if (numberOfPlate === 1) return [[departure, destination]]; + return [ + ...move(departure, waypoint, destination, numberOfPlate - 1), + ...move(departure, destination, waypoint, 1), + ...move(waypoint, destination, departure, numberOfPlate - 1), + ]; +}; +//재귀를 생각해보기에 좋은 문제입니다. +//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi +/* +n개가 있다면 +1. 1->2로 n-1개를 옮김 +2. 1->3으로 가장 큰 1개를 옮김 +3. 2->1로 n-2개를 옮김 +4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김 +의 반복 + +결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨. +a->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 +함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음. +*/ From 32adc56c89210e29ca5075f49db88d60216f4929 Mon Sep 17 00:00:00 2001 From: codeisneverodd Date: Wed, 20 Jul 2022 10:30:40 +0900 Subject: [PATCH 02/13] =?UTF-8?q?solution:=20=EB=AA=A8=EC=9D=8C=EC=82=AC?= =?UTF-8?q?=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\354\235\214-\354\202\254\354\240\204.js" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "level-2/\353\252\250\354\235\214-\354\202\254\354\240\204.js" diff --git "a/level-2/\353\252\250\354\235\214-\354\202\254\354\240\204.js" "b/level-2/\353\252\250\354\235\214-\354\202\254\354\240\204.js" new file mode 100644 index 0000000..e1df7ce --- /dev/null +++ "b/level-2/\353\252\250\354\235\214-\354\202\254\354\240\204.js" @@ -0,0 +1,30 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(word) { + const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 }; + const price = calculatePrice([1], 5); + return word + .split("") + .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet]) + .reduce((acc, curr) => acc + curr, 0); +} +const calculatePrice = (result = [1], targetLength) => { + if (result.length === targetLength) return result; + return calculatePrice([result[0] * 5 + 1, ...result], targetLength); +}; +/* +각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까? +4번째 자리 - 1 +3번째 자리 - 1*5 + 1 = 6 +2번째 자리 - 6*5 + 1 = 31 +1번째 자리 - 31*5 + 1 = 156 +0번째 자리 - 156*5 + 1 = 781 + +검증(1부터 시작하므로 1 + 비용) +I => (1 + 781 * 2) = 1563 +EIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189 +AAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10 +AAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6 +추천 레퍼런스: https://seongho96.tistory.com/50 +*/ From 876d450e090ae402c783a42285f28f2e9f540ba1 Mon Sep 17 00:00:00 2001 From: chaerin-dev Date: Tue, 19 Jul 2022 19:19:32 +0900 Subject: [PATCH 03/13] =?UTF-8?q?solution=20=EC=B2=B4=EC=9C=A1=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\262\264\354\234\241\353\263\265.js" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git "a/level-1/\354\262\264\354\234\241\353\263\265.js" "b/level-1/\354\262\264\354\234\241\353\263\265.js" index 07e99b8..5baa4f6 100644 --- "a/level-1/\354\262\264\354\234\241\353\263\265.js" +++ "b/level-1/\354\262\264\354\234\241\353\263\265.js" @@ -88,3 +88,40 @@ function solution(n, lost, reserve) { //그리디 // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다. // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다. + +//정답 4 - chaerin-dev +function solution(n, lost, reserve) { + // 학생들의 체육복 개수를 저장할 배열 students + // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정 + // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음 + const students = Array.from({ length: n + 1 }, () => 1); + + // 체육복 분실/여분 정보 students 배열에 반영 + lost.forEach((lostStudent) => students[lostStudent]--); + reserve.forEach((reserveStudent) => students[reserveStudent]++); + + // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt + let cnt = 0; + students.forEach((student, i) => { + // 현재 인덱스의 학생이 체육복이 없다면 + if (student === 0) { + // 바로 앞 학생이 체육복 여분이 있다면 + if (students[i - 1] === 2) { + // 바로 앞 학생에게 체육복 빌리기 + students[i - 1]--; + student++; + } + // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면 + else if (students[i + 1] === 2) { + // 바로 뒤 학생에게 체육복 빌리기 + students[i + 1]--; + student++; + } + // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음 + else cnt++; + } + }); + + // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수 + return n - cnt; +} \ No newline at end of file From 8127da5280544fe915bd1fb1820833a3ca1e6bcb Mon Sep 17 00:00:00 2001 From: chaerin-dev Date: Tue, 19 Jul 2022 19:20:49 +0900 Subject: [PATCH 04/13] =?UTF-8?q?solution=20=EB=AA=A8=EC=9D=98=EA=B3=A0?= =?UTF-8?q?=EC=82=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...50\354\235\230\352\263\240\354\202\254.js" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git "a/level-1/\353\252\250\354\235\230\352\263\240\354\202\254.js" "b/level-1/\353\252\250\354\235\230\352\263\240\354\202\254.js" index 2e682d2..c91c3b1 100644 --- "a/level-1/\353\252\250\354\235\230\352\263\240\354\202\254.js" +++ "b/level-1/\353\252\250\354\235\230\352\263\240\354\202\254.js" @@ -108,4 +108,28 @@ function solution(answers) { if (score[i] === Math.max(...score)) answer.push(i+1) } return answer; +} + +//정답 5 - chaerin-dev +function solution(answers) { + const pattern = [ + [1, 2, 3, 4, 5], + [2, 1, 2, 3, 2, 4, 2, 5], + [3, 3, 1, 1, 2, 2, 4, 4, 5, 5], + ]; + const scores = [0, 0, 0]; + + answers.forEach((answer, i) => { + for (let j = 0; j < pattern.length; j++) { + const patternLength = pattern[j].length; + if (answer === pattern[j][i % patternLength]) scores[j]++; + } + }); + + const answer = []; + const maxScore = Math.max(...scores); + scores.forEach((score, i) => { + if (score === maxScore) answer.push(i + 1); + }); + return answer; } \ No newline at end of file From 80613455147aa2526f1c51ffd3a3e55bda7babef Mon Sep 17 00:00:00 2001 From: chaerin-dev Date: Tue, 19 Jul 2022 19:22:00 +0900 Subject: [PATCH 05/13] =?UTF-8?q?solution=20=EC=9C=84=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "level-2/\354\234\204\354\236\245.js" | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git "a/level-2/\354\234\204\354\236\245.js" "b/level-2/\354\234\204\354\236\245.js" index 01ff8ff..1466598 100644 --- "a/level-2/\354\234\204\354\236\245.js" +++ "b/level-2/\354\234\204\354\236\245.js" @@ -66,4 +66,24 @@ function solution(clothes) { 2. obj에 해당 키가 없으면 값을 1(옷을 입지 않은 경우)로 지정하고 1(옷의 개수)을 더해줌. 3. obj에 해당 키가 있으면 해당 키의 값을 불러오고 1을 더해줌. 4. for in 구문으로 obj의 키를 반복하여 불러오고 해당 값을 answer에 곱해줌 -5. 최소한 1가지 이상의 옷을 입기 떄문에 옷을 입지 않은 경우 -1로 제외. */ \ No newline at end of file +5. 최소한 1가지 이상의 옷을 입기 떄문에 옷을 입지 않은 경우 -1로 제외. */ + +//정답 5 - chaerin-dev +function solution(clothes) { + // 각 카테고리별 의상의 수를 clothsObj 객체에 저장 + const clothsObj = {}; + clothes.forEach((cloth) => + clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1) + ); + + // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐 + // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나) + // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨 + let answer = 1; + for (let key of Object.keys(clothsObj)) { + answer *= clothsObj[key] + 1; + } + + // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기 + return answer - 1; +} \ No newline at end of file From 4fb5408572e7a957c20cf2e74100fd710fcc7af6 Mon Sep 17 00:00:00 2001 From: chaerin-dev Date: Tue, 19 Jul 2022 19:22:53 +0900 Subject: [PATCH 06/13] =?UTF-8?q?solution=20=ED=8A=9C=ED=94=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "level-2/\355\212\234\355\224\214.js" | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git "a/level-2/\355\212\234\355\224\214.js" "b/level-2/\355\212\234\355\224\214.js" index bcde779..bcdce86 100644 --- "a/level-2/\355\212\234\355\224\214.js" +++ "b/level-2/\355\212\234\355\224\214.js" @@ -10,4 +10,24 @@ function solution(s) { .sort((a, b) => a.length - b.length) for (const set of sets) answer.push(...set.filter(x => !answer.includes(x))) return answer; +} + +//정답 2 - chaerin-dev +function solution(s) { + // 문자열 -> 정수 이차원 배열 + const sArr = s + .substring(2, s.length - 2) + .split("},{") + .map((e) => e.split(",").map((e) => parseInt(e))) + .sort((a, b) => a.length - b.length); + // 정답을 저장할 배열 + const answer = []; + // 이차원배열을 순회하며 직전 배열과 겹치지 않는 요소만 answer에 추가 + for (let i = 0; i < sArr.length; i++) { + for (let j = 0; j < sArr[i].length; j++) { + const temp = sArr[i][j]; + if (!answer.includes(sArr[i][j])) answer.push(sArr[i][j]); + } + } + return answer; } \ No newline at end of file From 1cbfe9279fd8f8363d60f3bfb8fb92123d811ae3 Mon Sep 17 00:00:00 2001 From: codeisneverodd Date: Wed, 20 Jul 2022 11:02:05 +0900 Subject: [PATCH 07/13] =?UTF-8?q?=EB=B8=8C=EB=9E=9C=EC=B9=98=20=ED=9D=90?= =?UTF-8?q?=EB=A6=84=20=EC=A0=95=EB=A6=AC=20(#71)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: 커밋 컨벤션 수정 및 contributor 추가 * Automatic Update README.md * fix: 오타 수정 * docs: 커밋 컨벤션 변경 및 리드미 디자인 수정 * docs: 풀이 완료시점 수정 * Automatic Update README.md * docs: PR 템플릿 추가 Co-authored-by: github-actions --- .github/workflows/PULL_REQUEST_TEMPLATE.md | 8 +++ .github/workflows/update-README.yml | 7 +- README.md | 76 ++++++++++++---------- package-lock.json | 22 ++++++- package.json | 3 +- utils/build.js | 76 ++++++++++++---------- 6 files changed, 114 insertions(+), 78 deletions(-) create mode 100644 .github/workflows/PULL_REQUEST_TEMPLATE.md diff --git a/.github/workflows/PULL_REQUEST_TEMPLATE.md b/.github/workflows/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..1a98a58 --- /dev/null +++ b/.github/workflows/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +## 새롭게 추가된 문제 풀이 + + + + +## 기존 풀이에 추가한 풀이 + +## 관련 이슈 diff --git a/.github/workflows/update-README.yml b/.github/workflows/update-README.yml index e3fbac5..b31a500 100644 --- a/.github/workflows/update-README.yml +++ b/.github/workflows/update-README.yml @@ -7,14 +7,13 @@ on: push: branches: - main - - cruelladevil-readme-test + - manage pull_request: branches: - main - - cruelladevil-readme-test + - manage jobs: build: - runs-on: ubuntu-latest steps: @@ -23,7 +22,7 @@ jobs: uses: actions/setup-node@v3 with: node-version: 16.14.0 - cache: 'npm' + cache: "npm" - name: install package run: npm install - name: build README.md diff --git a/README.md b/README.md index 92a506a..cb78099 100644 --- a/README.md +++ b/README.md @@ -16,27 +16,28 @@ ### 🧪 기능 구현 -| Main Contributors | Contribute Lists | About Me | -| ----------------------------------------------- | --------------------------- | -------- | -| [cruelladevil](https://github.com/cruelladevil) | - README 자동 업데이트 구현 | 🚧 | +| Main Contributors | +| ----------------------------------------------- | +| [cruelladevil](https://github.com/cruelladevil) | ### 🔥 문제 풀이 -| Main Contributors | Commits | About Me | -| --------------------------------------------------- | ------- | -------- | -| [codeisneverodd](https://github.com/codeisneverodd) | 🚧 | 🚧 | -| [chaerin-dev](https://github.com/chaerin-dev) | 🚧 | 🚧 | -| [jaewon1676](https://github.com/jaewon1676) | 🚧 | 🚧 | -| [prove-ability](https://github.com/prove-ability) | 🚧 | 🚧 | -| [yongchanson](https://github.com/yongchanson) | 🚧 | 🚧 | - -| Contributors | Commits | -| ------------------------------------------- | ------- | -| [createhb21](https://github.com/createhb21) | 🚧 | -| [le2sky](https://github.com/le2sky) | 🚧 | -| [ljw0096](https://github.com/ljw0096) | 🚧 | +| Main Contributors | +| --------------------------------------------------- | +| [codeisneverodd](https://github.com/codeisneverodd) | +| [chaerin-dev](https://github.com/chaerin-dev) | +| [jaewon1676](https://github.com/jaewon1676) | +| [prove-ability](https://github.com/prove-ability) | +| [yongchanson](https://github.com/yongchanson) | + +| Contributors | +| ------------------------------------------- | +| [createhb21](https://github.com/createhb21) | +| [le2sky](https://github.com/le2sky) | +| [ljw0096](https://github.com/ljw0096) | +| [minjongbaek](https://github.com/minjongbaek) | ### Level 1 ✅ @@ -106,7 +107,7 @@ - 전체 문제 수: 64문제 - 풀이 문제 수: 52문제 -- 풀이 완료 예상 시점: 2022년 4월 중 +- 풀이 완료 예상 시점: 2022년 7월 중 | 번호 | 문제 출처 | 풀이 | | --- | ------- | --- | @@ -167,7 +168,7 @@ - 전체 문제 수: 52문제 - 풀이 문제 수: 9문제 -- 풀이 완료 예상 시점: 2022년 8월 중 +- 풀이 완료 예상 시점: 2022년 10월 중 | 번호 | 문제 출처 | 풀이 | | --- | ------- | --- | @@ -203,24 +204,27 @@ ## 🙏🏻 아직 풀리지 않은 문제의 해답을 추가해 주세요! ### 커밋 컨벤션 -| 접두어 | 작업 내용 | -| ------- | -------------------------------------------------- | -| Create | 새로운 파일 생성 후 문제풀이 코드를 추가 할 경우 | -| Add | 기존 파일에 문제풀이 코드를 추가 할 경우 | -| Update | 파일의 기존 코드를 수정 할 경우 | -| Rename | 파일 혹은 폴더명을 수정하거나 옮기는 작업만일 경우 | -| Remove | 파일을 삭제하는 작업만 수행한 경우 | -| Comment | 주석 추가 및 수정의 경우 | - -### 추가 방법 - -1. 우측 상단의 Fork를 눌러 본인의 GitHub로 이동합니다. -2. Fork한 Repository를 `git clone 자신이-Fork한-자신의-Repository-주소` 를 통해 다운받습니다. -3. 해답을 해당하는 Level의 폴더에 `00-해답-예시.js`에 따라 생성합니다. 이때, **반드시 공백은`-` 바꾸어** 파일 이름을 짓습니다. -4. 자신이 Fork한 자신의 Repository에 push를 한 후, GitHub에서 Create pull request를 통해 기여합니다. -5. 해설은 검수자들의 확인이 끝나는대로 본 Repository에 반영됩니다. - -## 저작권 + +| 접두어 | 작업 내용 | +| -------- | ----------------------------------- | +| solution | 풀이 추가 | +| fix | 모든 종류의 오류 수정 | +| docs | 문서 수정(코드 수정 없음) | +| etc | 위의 경우에 해당하는 것이 없는 경우 | + +### 🌱 풀이 기여 방법 + +1. Fork 한 후 본인의 해설을 추가합니다. +2. 본인의 저장소에서 이곳으로 PR을 하면, 검토 및 코드리뷰 후 반영됩니다. + +### 🔥 기여 시 필수 사항 +1. 파일 이름은 공백이 없어야하며, 공백은 - 로 채웁니다.(문제풀이 창에서 문제 이름을 복사하여 사용하는 것을 권장드립니다 + +예시) 가장 먼 노드 => 가장-먼-노드.js // [1차] 뉴스 클러스터링 => [1차]-뉴스-클러스터링 + +2. 풀이를 추가할 시 반드시 주석을 작성하여야합니다. 기존 파일에 추가할 때는, 기존 해설들의 주석을. 새롭게 파일을 생성하실 때는 00-해답-예시.js 를 참고하시면 됩니다. + +## 👉 저작권 해당 Repository의 해답을 자신의 저작물에 추가할 수 있지만 **반드시** 본 Repository의 주소 `https://github.com/codeisneverodd/programmers-coding-test` diff --git a/package-lock.json b/package-lock.json index 231da30..9858c59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "license": "MIT", "dependencies": { "cheerio": "^1.0.0-rc.10", - "node-fetch": "^3.2.3" + "node-fetch": "^3.2.3", + "prettier": "^2.7.1" } }, "node_modules/boolbase": { @@ -256,6 +257,20 @@ "parse5": "^6.0.1" } }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", @@ -426,6 +441,11 @@ "parse5": "^6.0.1" } }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" + }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", diff --git a/package.json b/package.json index 1eb001e..3c04800 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "homepage": "https://github.com/codeisneverodd/programmers-coding-test#readme", "dependencies": { "cheerio": "^1.0.0-rc.10", - "node-fetch": "^3.2.3" + "node-fetch": "^3.2.3", + "prettier": "^2.7.1" } } diff --git a/utils/build.js b/utils/build.js index 5c42d23..099fe20 100644 --- a/utils/build.js +++ b/utils/build.js @@ -22,27 +22,28 @@ const updateData = `# 프로그래머스 모든 문제 풀이 ### 🧪 기능 구현 -| Main Contributors | Contribute Lists | About Me | -| ----------------------------------------------- | --------------------------- | -------- | -| [cruelladevil](https://github.com/cruelladevil) | - README 자동 업데이트 구현 | 🚧 | +| Main Contributors | +| ----------------------------------------------- | +| [cruelladevil](https://github.com/cruelladevil) | ### 🔥 문제 풀이 -| Main Contributors | Commits | About Me | -| --------------------------------------------------- | ------- | -------- | -| [codeisneverodd](https://github.com/codeisneverodd) | 🚧 | 🚧 | -| [chaerin-dev](https://github.com/chaerin-dev) | 🚧 | 🚧 | -| [jaewon1676](https://github.com/jaewon1676) | 🚧 | 🚧 | -| [prove-ability](https://github.com/prove-ability) | 🚧 | 🚧 | -| [yongchanson](https://github.com/yongchanson) | 🚧 | 🚧 | - -| Contributors | Commits | -| ------------------------------------------- | ------- | -| [createhb21](https://github.com/createhb21) | 🚧 | -| [le2sky](https://github.com/le2sky) | 🚧 | -| [ljw0096](https://github.com/ljw0096) | 🚧 | +| Main Contributors | +| --------------------------------------------------- | +| [codeisneverodd](https://github.com/codeisneverodd) | +| [chaerin-dev](https://github.com/chaerin-dev) | +| [jaewon1676](https://github.com/jaewon1676) | +| [prove-ability](https://github.com/prove-ability) | +| [yongchanson](https://github.com/yongchanson) | + +| Contributors | +| ------------------------------------------- | +| [createhb21](https://github.com/createhb21) | +| [le2sky](https://github.com/le2sky) | +| [ljw0096](https://github.com/ljw0096) | +| [minjongbaek](https://github.com/minjongbaek) | ### Level 1 ✅ @@ -58,7 +59,7 @@ ${getTableStr(1)} - 전체 문제 수: 64문제 - 풀이 문제 수: ${getInfoList(2).length}문제 -- 풀이 완료 예상 시점: 2022년 4월 중 +- 풀이 완료 예상 시점: 2022년 7월 중 | 번호 | 문제 출처 | 풀이 | | --- | ------- | --- | @@ -68,7 +69,7 @@ ${getTableStr(2)} - 전체 문제 수: 52문제 - 풀이 문제 수: ${getInfoList(3).length}문제 -- 풀이 완료 예상 시점: 2022년 8월 중 +- 풀이 완료 예상 시점: 2022년 10월 중 | 번호 | 문제 출처 | 풀이 | | --- | ------- | --- | @@ -96,24 +97,27 @@ ${getTableStr(5)} ## 🙏🏻 아직 풀리지 않은 문제의 해답을 추가해 주세요! ### 커밋 컨벤션 -| 접두어 | 작업 내용 | -| ------- | -------------------------------------------------- | -| Create | 새로운 파일 생성 후 문제풀이 코드를 추가 할 경우 | -| Add | 기존 파일에 문제풀이 코드를 추가 할 경우 | -| Update | 파일의 기존 코드를 수정 할 경우 | -| Rename | 파일 혹은 폴더명을 수정하거나 옮기는 작업만일 경우 | -| Remove | 파일을 삭제하는 작업만 수행한 경우 | -| Comment | 주석 추가 및 수정의 경우 | - -### 추가 방법 - -1. 우측 상단의 Fork를 눌러 본인의 GitHub로 이동합니다. -2. Fork한 Repository를 \`git clone 자신이-Fork한-자신의-Repository-주소\` 를 통해 다운받습니다. -3. 해답을 해당하는 Level의 폴더에 \`00-해답-예시.js\`에 따라 생성합니다. 이때, **반드시 공백은\`-\` 바꾸어** 파일 이름을 짓습니다. -4. 자신이 Fork한 자신의 Repository에 push를 한 후, GitHub에서 Create pull request를 통해 기여합니다. -5. 해설은 검수자들의 확인이 끝나는대로 본 Repository에 반영됩니다. - -## 저작권 + +| 접두어 | 작업 내용 | +| -------- | ----------------------------------- | +| solution | 풀이 추가 | +| fix | 모든 종류의 오류 수정 | +| docs | 문서 수정(코드 수정 없음) | +| etc | 위의 경우에 해당하는 것이 없는 경우 | + +### 🌱 풀이 기여 방법 + +1. Fork 한 후 본인의 해설을 추가합니다. +2. 본인의 저장소에서 이곳으로 PR을 하면, 검토 및 코드리뷰 후 반영됩니다. + +### 🔥 기여 시 필수 사항 +1. 파일 이름은 공백이 없어야하며, 공백은 - 로 채웁니다.(문제풀이 창에서 문제 이름을 복사하여 사용하는 것을 권장드립니다 + +예시) 가장 먼 노드 => 가장-먼-노드.js // [1차] 뉴스 클러스터링 => [1차]-뉴스-클러스터링 + +2. 풀이를 추가할 시 반드시 주석을 작성하여야합니다. 기존 파일에 추가할 때는, 기존 해설들의 주석을. 새롭게 파일을 생성하실 때는 00-해답-예시.js 를 참고하시면 됩니다. + +## 👉 저작권 해당 Repository의 해답을 자신의 저작물에 추가할 수 있지만 **반드시** 본 Repository의 주소 \`https://github.com/codeisneverodd/programmers-coding-test\` From 4440efc51b7727017ae830a2b4663caa1d7e76f5 Mon Sep 17 00:00:00 2001 From: codeisneverodd Date: Fri, 22 Jul 2022 13:53:35 +0900 Subject: [PATCH 08/13] =?UTF-8?q?fix:=20base=20url=20=ED=95=AB=ED=94=BD?= =?UTF-8?q?=EC=8A=A4=20(#74)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: 커밋 컨벤션 수정 및 contributor 추가 * Automatic Update README.md * fix: 오타 수정 * docs: 커밋 컨벤션 변경 및 리드미 디자인 수정 * docs: 풀이 완료시점 수정 * Automatic Update README.md * docs: PR 템플릿 추가 * fix: 링크 base url 수정 (#73) * Automatic Update README.md Co-authored-by: github-actions --- README.md | 234 ++++++++++++++++++++++++------------------------ utils/string.js | 36 ++++---- 2 files changed, 135 insertions(+), 135 deletions(-) diff --git a/README.md b/README.md index cb78099..fc79d7f 100644 --- a/README.md +++ b/README.md @@ -47,61 +47,61 @@ | 번호 | 문제 출처 | 풀이 | | --- | ------- | --- | -| 1 | [2016년](/learn/courses/30/lessons/12901) | [2016년.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/2016년.js) | -| 2 | [3진법 뒤집기](/learn/courses/30/lessons/68935) | [3진법-뒤집기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/3진법-뒤집기.js) | -| 3 | [K번째수](/learn/courses/30/lessons/42748) | [K번째수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/K번째수.js) | -| 4 | [[1차] 다트 게임](/learn/courses/30/lessons/17682) | [[1차]-다트-게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/[1차]-다트-게임.js) | -| 5 | [[1차] 비밀지도](/learn/courses/30/lessons/17681) | [[1차]-비밀지도.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/[1차]-비밀지도.js) | -| 6 | [x만큼 간격이 있는 n개의 숫자](/learn/courses/30/lessons/12954) | [x만큼-간격이-있는-n개의-숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/x만큼-간격이-있는-n개의-숫자.js) | -| 7 | [가운데 글자 가져오기](/learn/courses/30/lessons/12903) | [가운데-글자-가져오기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/가운데-글자-가져오기.js) | -| 8 | [같은 숫자는 싫어](/learn/courses/30/lessons/12906) | [같은-숫자는-싫어.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/같은-숫자는-싫어.js) | -| 9 | [나누어 떨어지는 숫자 배열](/learn/courses/30/lessons/12910) | [나누어-떨어지는-숫자-배열.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/나누어-떨어지는-숫자-배열.js) | -| 10 | [나머지가 1이 되는 수 찾기](/learn/courses/30/lessons/87389) | [나머지가-1이-되는-수-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/나머지가-1이-되는-수-찾기.js) | -| 11 | [내적](/learn/courses/30/lessons/70128) | [내적.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/내적.js) | -| 12 | [두 개 뽑아서 더하기](/learn/courses/30/lessons/68644) | [두-개-뽑아서-더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/두-개-뽑아서-더하기.js) | -| 13 | [두 정수 사이의 합](/learn/courses/30/lessons/12912) | [두-정수-사이의-합.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/두-정수-사이의-합.js) | -| 14 | [로또의 최고 순위와 최저 순위](/learn/courses/30/lessons/77484) | [로또의-최고-순위와-최저-순위.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/로또의-최고-순위와-최저-순위.js) | -| 15 | [모의고사](/learn/courses/30/lessons/42840) | [모의고사.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/모의고사.js) | -| 16 | [문자열 내 p와 y의 개수](/learn/courses/30/lessons/12916) | [문자열-내-p와-y의-개수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-내-p와-y의-개수.js) | -| 17 | [문자열 내 마음대로 정렬하기](/learn/courses/30/lessons/12915) | [문자열-내-마음대로-정렬하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-내-마음대로-정렬하기.js) | -| 18 | [문자열 내림차순으로 배치하기](/learn/courses/30/lessons/12917) | [문자열-내림차순으로-배치하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-내림차순으로-배치하기.js) | -| 19 | [문자열 다루기 기본](/learn/courses/30/lessons/12918) | [문자열-다루기-기본.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-다루기-기본.js) | -| 20 | [문자열을 정수로 바꾸기](/learn/courses/30/lessons/12925) | [문자열을-정수로-바꾸기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열을-정수로-바꾸기.js) | -| 21 | [부족한 금액 계산하기](/learn/courses/30/lessons/82612) | [부족한-금액-계산하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/부족한-금액-계산하기.js) | -| 22 | [서울에서 김서방 찾기](/learn/courses/30/lessons/12919) | [서울에서-김서방-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/서울에서-김서방-찾기.js) | -| 23 | [소수 만들기](/learn/courses/30/lessons/12977) | [소수-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/소수-만들기.js) | -| 24 | [소수 찾기](/learn/courses/30/lessons/42839) | [소수-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/소수-찾기.js) | -| 25 | [수박수박수박수박수박수?](/learn/courses/30/lessons/12922) | [수박수박수박수박수박수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/수박수박수박수박수박수.js) | -| 26 | [숫자 문자열과 영단어](/learn/courses/30/lessons/81301) | [숫자-문자열과-영단어.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/숫자-문자열과-영단어.js) | -| 27 | [시저 암호](/learn/courses/30/lessons/12926) | [시저-암호.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/시저-암호.js) | -| 28 | [신고 결과 받기](/learn/courses/30/lessons/92334) | [신고-결과-받기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/신고-결과-받기.js) | -| 29 | [신규 아이디 추천](/learn/courses/30/lessons/72410) | [신규-아이디-추천.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/신규-아이디-추천.js) | -| 30 | [실패율](/learn/courses/30/lessons/42889) | [실패율.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/실패율.js) | -| 31 | [약수의 개수와 덧셈](/learn/courses/30/lessons/77884) | [약수의-개수와-덧셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/약수의-개수와-덧셈.js) | -| 32 | [약수의 합](/learn/courses/30/lessons/12928) | [약수의-합.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/약수의-합.js) | -| 33 | [없는 숫자 더하기](/learn/courses/30/lessons/86051) | [없는-숫자-더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/없는-숫자-더하기.js) | -| 34 | [예산](/learn/courses/30/lessons/12982) | [예산.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/예산.js) | -| 35 | [완주하지 못한 선수](/learn/courses/30/lessons/42576) | [완주하지-못한-선수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/완주하지-못한-선수.js) | -| 36 | [음양 더하기](/learn/courses/30/lessons/76501) | [음양-더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/음양-더하기.js) | -| 37 | [이상한 문자 만들기](/learn/courses/30/lessons/12930) | [이상한-문자-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/이상한-문자-만들기.js) | -| 38 | [자릿수 더하기](/learn/courses/30/lessons/12931) | [자릿수-더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/자릿수-더하기.js) | -| 39 | [자연수 뒤집어 배열로 만들기](/learn/courses/30/lessons/12932) | [자연수-뒤집어-배열로-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/자연수-뒤집어-배열로-만들기.js) | -| 40 | [정수 내림차순으로 배치하기](/learn/courses/30/lessons/12933) | [정수-내림차순으로-배치하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/정수-내림차순으로-배치하기.js) | -| 41 | [정수 제곱근 판별](/learn/courses/30/lessons/12934) | [정수-제곱근-판별.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/정수-제곱근-판별.js) | -| 42 | [제일 작은 수 제거하기](/learn/courses/30/lessons/12935) | [제일-작은-수-제거하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/제일-작은-수-제거하기.js) | -| 43 | [직사각형 별찍기](/learn/courses/30/lessons/12969) | [직사각형-별찍기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/직사각형-별찍기.js) | -| 44 | [짝수와 홀수](/learn/courses/30/lessons/12937) | [짝수와-홀수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/짝수와-홀수.js) | -| 45 | [체육복](/learn/courses/30/lessons/42862) | [체육복.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/체육복.js) | -| 46 | [최대공약수와 최소공배수](/learn/courses/30/lessons/12940) | [최대공약수와-최소공배수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/최대공약수와-최소공배수.js) | -| 47 | [최소직사각형](/learn/courses/30/lessons/86491) | [최소직사각형.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/최소직사각형.js) | -| 48 | [콜라츠 추측](/learn/courses/30/lessons/12943) | [콜라츠-추측.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/콜라츠-추측.js) | -| 49 | [크레인 인형뽑기 게임](/learn/courses/30/lessons/64061) | [크레인-인형뽑기-게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/크레인-인형뽑기-게임.js) | -| 50 | [키패드 누르기](/learn/courses/30/lessons/67256) | [키패드-누르기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/키패드-누르기.js) | -| 51 | [평균 구하기](/learn/courses/30/lessons/12944) | [평균-구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/평균-구하기.js) | -| 52 | [폰켓몬](/learn/courses/30/lessons/1845) | [폰켓몬.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/폰켓몬.js) | -| 53 | [하샤드 수](/learn/courses/30/lessons/12947) | [하샤드-수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/하샤드-수.js) | -| 54 | [핸드폰 번호 가리기](/learn/courses/30/lessons/12948) | [핸드폰-번호-가리기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/핸드폰-번호-가리기.js) | -| 55 | [행렬의 덧셈](/learn/courses/30/lessons/12950) | [행렬의-덧셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/행렬의-덧셈.js) | +| 1 | [2016년](https://school.programmers.co.kr//learn/courses/30/lessons/12901) | [2016년.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/2016년.js) | +| 2 | [3진법 뒤집기](https://school.programmers.co.kr//learn/courses/30/lessons/68935) | [3진법-뒤집기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/3진법-뒤집기.js) | +| 3 | [K번째수](https://school.programmers.co.kr//learn/courses/30/lessons/42748) | [K번째수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/K번째수.js) | +| 4 | [[1차] 다트 게임](https://school.programmers.co.kr//learn/courses/30/lessons/17682) | [[1차]-다트-게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/[1차]-다트-게임.js) | +| 5 | [[1차] 비밀지도](https://school.programmers.co.kr//learn/courses/30/lessons/17681) | [[1차]-비밀지도.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/[1차]-비밀지도.js) | +| 6 | [x만큼 간격이 있는 n개의 숫자](https://school.programmers.co.kr//learn/courses/30/lessons/12954) | [x만큼-간격이-있는-n개의-숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/x만큼-간격이-있는-n개의-숫자.js) | +| 7 | [가운데 글자 가져오기](https://school.programmers.co.kr//learn/courses/30/lessons/12903) | [가운데-글자-가져오기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/가운데-글자-가져오기.js) | +| 8 | [같은 숫자는 싫어](https://school.programmers.co.kr//learn/courses/30/lessons/12906) | [같은-숫자는-싫어.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/같은-숫자는-싫어.js) | +| 9 | [나누어 떨어지는 숫자 배열](https://school.programmers.co.kr//learn/courses/30/lessons/12910) | [나누어-떨어지는-숫자-배열.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/나누어-떨어지는-숫자-배열.js) | +| 10 | [나머지가 1이 되는 수 찾기](https://school.programmers.co.kr//learn/courses/30/lessons/87389) | [나머지가-1이-되는-수-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/나머지가-1이-되는-수-찾기.js) | +| 11 | [내적](https://school.programmers.co.kr//learn/courses/30/lessons/70128) | [내적.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/내적.js) | +| 12 | [두 개 뽑아서 더하기](https://school.programmers.co.kr//learn/courses/30/lessons/68644) | [두-개-뽑아서-더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/두-개-뽑아서-더하기.js) | +| 13 | [두 정수 사이의 합](https://school.programmers.co.kr//learn/courses/30/lessons/12912) | [두-정수-사이의-합.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/두-정수-사이의-합.js) | +| 14 | [로또의 최고 순위와 최저 순위](https://school.programmers.co.kr//learn/courses/30/lessons/77484) | [로또의-최고-순위와-최저-순위.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/로또의-최고-순위와-최저-순위.js) | +| 15 | [모의고사](https://school.programmers.co.kr//learn/courses/30/lessons/42840) | [모의고사.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/모의고사.js) | +| 16 | [문자열 내 p와 y의 개수](https://school.programmers.co.kr//learn/courses/30/lessons/12916) | [문자열-내-p와-y의-개수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-내-p와-y의-개수.js) | +| 17 | [문자열 내 마음대로 정렬하기](https://school.programmers.co.kr//learn/courses/30/lessons/12915) | [문자열-내-마음대로-정렬하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-내-마음대로-정렬하기.js) | +| 18 | [문자열 내림차순으로 배치하기](https://school.programmers.co.kr//learn/courses/30/lessons/12917) | [문자열-내림차순으로-배치하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-내림차순으로-배치하기.js) | +| 19 | [문자열 다루기 기본](https://school.programmers.co.kr//learn/courses/30/lessons/12918) | [문자열-다루기-기본.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-다루기-기본.js) | +| 20 | [문자열을 정수로 바꾸기](https://school.programmers.co.kr//learn/courses/30/lessons/12925) | [문자열을-정수로-바꾸기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열을-정수로-바꾸기.js) | +| 21 | [부족한 금액 계산하기](https://school.programmers.co.kr//learn/courses/30/lessons/82612) | [부족한-금액-계산하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/부족한-금액-계산하기.js) | +| 22 | [서울에서 김서방 찾기](https://school.programmers.co.kr//learn/courses/30/lessons/12919) | [서울에서-김서방-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/서울에서-김서방-찾기.js) | +| 23 | [소수 만들기](https://school.programmers.co.kr//learn/courses/30/lessons/12977) | [소수-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/소수-만들기.js) | +| 24 | [소수 찾기](https://school.programmers.co.kr//learn/courses/30/lessons/42839) | [소수-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/소수-찾기.js) | +| 25 | [수박수박수박수박수박수?](https://school.programmers.co.kr//learn/courses/30/lessons/12922) | [수박수박수박수박수박수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/수박수박수박수박수박수.js) | +| 26 | [숫자 문자열과 영단어](https://school.programmers.co.kr//learn/courses/30/lessons/81301) | [숫자-문자열과-영단어.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/숫자-문자열과-영단어.js) | +| 27 | [시저 암호](https://school.programmers.co.kr//learn/courses/30/lessons/12926) | [시저-암호.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/시저-암호.js) | +| 28 | [신고 결과 받기](https://school.programmers.co.kr//learn/courses/30/lessons/92334) | [신고-결과-받기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/신고-결과-받기.js) | +| 29 | [신규 아이디 추천](https://school.programmers.co.kr//learn/courses/30/lessons/72410) | [신규-아이디-추천.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/신규-아이디-추천.js) | +| 30 | [실패율](https://school.programmers.co.kr//learn/courses/30/lessons/42889) | [실패율.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/실패율.js) | +| 31 | [약수의 개수와 덧셈](https://school.programmers.co.kr//learn/courses/30/lessons/77884) | [약수의-개수와-덧셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/약수의-개수와-덧셈.js) | +| 32 | [약수의 합](https://school.programmers.co.kr//learn/courses/30/lessons/12928) | [약수의-합.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/약수의-합.js) | +| 33 | [없는 숫자 더하기](https://school.programmers.co.kr//learn/courses/30/lessons/86051) | [없는-숫자-더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/없는-숫자-더하기.js) | +| 34 | [예산](https://school.programmers.co.kr//learn/courses/30/lessons/12982) | [예산.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/예산.js) | +| 35 | [완주하지 못한 선수](https://school.programmers.co.kr//learn/courses/30/lessons/42576) | [완주하지-못한-선수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/완주하지-못한-선수.js) | +| 36 | [음양 더하기](https://school.programmers.co.kr//learn/courses/30/lessons/76501) | [음양-더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/음양-더하기.js) | +| 37 | [이상한 문자 만들기](https://school.programmers.co.kr//learn/courses/30/lessons/12930) | [이상한-문자-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/이상한-문자-만들기.js) | +| 38 | [자릿수 더하기](https://school.programmers.co.kr//learn/courses/30/lessons/12931) | [자릿수-더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/자릿수-더하기.js) | +| 39 | [자연수 뒤집어 배열로 만들기](https://school.programmers.co.kr//learn/courses/30/lessons/12932) | [자연수-뒤집어-배열로-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/자연수-뒤집어-배열로-만들기.js) | +| 40 | [정수 내림차순으로 배치하기](https://school.programmers.co.kr//learn/courses/30/lessons/12933) | [정수-내림차순으로-배치하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/정수-내림차순으로-배치하기.js) | +| 41 | [정수 제곱근 판별](https://school.programmers.co.kr//learn/courses/30/lessons/12934) | [정수-제곱근-판별.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/정수-제곱근-판별.js) | +| 42 | [제일 작은 수 제거하기](https://school.programmers.co.kr//learn/courses/30/lessons/12935) | [제일-작은-수-제거하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/제일-작은-수-제거하기.js) | +| 43 | [직사각형 별찍기](https://school.programmers.co.kr//learn/courses/30/lessons/12969) | [직사각형-별찍기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/직사각형-별찍기.js) | +| 44 | [짝수와 홀수](https://school.programmers.co.kr//learn/courses/30/lessons/12937) | [짝수와-홀수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/짝수와-홀수.js) | +| 45 | [체육복](https://school.programmers.co.kr//learn/courses/30/lessons/42862) | [체육복.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/체육복.js) | +| 46 | [최대공약수와 최소공배수](https://school.programmers.co.kr//learn/courses/30/lessons/12940) | [최대공약수와-최소공배수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/최대공약수와-최소공배수.js) | +| 47 | [최소직사각형](https://school.programmers.co.kr//learn/courses/30/lessons/86491) | [최소직사각형.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/최소직사각형.js) | +| 48 | [콜라츠 추측](https://school.programmers.co.kr//learn/courses/30/lessons/12943) | [콜라츠-추측.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/콜라츠-추측.js) | +| 49 | [크레인 인형뽑기 게임](https://school.programmers.co.kr//learn/courses/30/lessons/64061) | [크레인-인형뽑기-게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/크레인-인형뽑기-게임.js) | +| 50 | [키패드 누르기](https://school.programmers.co.kr//learn/courses/30/lessons/67256) | [키패드-누르기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/키패드-누르기.js) | +| 51 | [평균 구하기](https://school.programmers.co.kr//learn/courses/30/lessons/12944) | [평균-구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/평균-구하기.js) | +| 52 | [폰켓몬](https://school.programmers.co.kr//learn/courses/30/lessons/1845) | [폰켓몬.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/폰켓몬.js) | +| 53 | [하샤드 수](https://school.programmers.co.kr//learn/courses/30/lessons/12947) | [하샤드-수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/하샤드-수.js) | +| 54 | [핸드폰 번호 가리기](https://school.programmers.co.kr//learn/courses/30/lessons/12948) | [핸드폰-번호-가리기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/핸드폰-번호-가리기.js) | +| 55 | [행렬의 덧셈](https://school.programmers.co.kr//learn/courses/30/lessons/12950) | [행렬의-덧셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/행렬의-덧셈.js) | ### Level 2 👨🏻‍💻(풀이 중..) @@ -111,58 +111,58 @@ | 번호 | 문제 출처 | 풀이 | | --- | ------- | --- | -| 1 | [124 나라의 숫자](/learn/courses/30/lessons/12899) | [124-나라의-숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/124-나라의-숫자.js) | -| 2 | [2개 이하로 다른 비트](/learn/courses/30/lessons/77885) | [2개-이하로-다른-비트.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/2개-이하로-다른-비트.js) | -| 3 | [H-Index](/learn/courses/30/lessons/42747) | [H-Index.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/H-Index.js) | -| 4 | [JadenCase 문자열 만들기](/learn/courses/30/lessons/12951) | [JadenCase-문자열-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/JadenCase-문자열-만들기.js) | -| 5 | [N개의 최소공배수](/learn/courses/30/lessons/12953) | [N개의-최소공배수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/N개의-최소공배수.js) | -| 6 | [[1차] 뉴스 클러스터링](/learn/courses/30/lessons/17677) | [[1차]-뉴스-클러스터링.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[1차]-뉴스-클러스터링.js) | -| 7 | [[1차] 캐시](/learn/courses/30/lessons/17680) | [[1차]-캐시.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[1차]-캐시.js) | -| 8 | [[3차] n진수 게임](/learn/courses/30/lessons/17687) | [[3차]-n진수-게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-n진수-게임.js) | -| 9 | [[3차] 방금그곡](/learn/courses/30/lessons/17683) | [[3차]-방금그곡.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-방금그곡.js) | -| 10 | [[3차] 파일명 정렬](/learn/courses/30/lessons/17686) | [[3차]-파일명-정렬.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-파일명-정렬.js) | -| 11 | [k진수에서 소수 개수 구하기](/learn/courses/30/lessons/92335) | [k진수에서-소수-개수-구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/k진수에서-소수-개수-구하기.js) | -| 12 | [n^2 배열 자르기](/learn/courses/30/lessons/87390) | [n^2-배열-자르기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/n^2-배열-자르기.js) | -| 13 | [가장 큰 수](/learn/courses/30/lessons/42746) | [가장-큰-수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/가장-큰-수.js) | -| 14 | [가장 큰 정사각형 찾기](/learn/courses/30/lessons/12905) | [가장-큰-정사각형-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/가장-큰-정사각형-찾기.js) | -| 15 | [거리두기 확인하기](/learn/courses/30/lessons/81302) | [거리두기-확인하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/거리두기-확인하기.js) | -| 16 | [게임 맵 최단거리](/learn/courses/30/lessons/1844) | [게임-맵-최단거리.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/게임-맵-최단거리.js) | -| 17 | [괄호 변환](/learn/courses/30/lessons/60058) | [괄호-변환.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/괄호-변환.js) | -| 18 | [괄호 회전하기](/learn/courses/30/lessons/76502) | [괄호-회전하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/괄호-회전하기.js) | -| 19 | [구명보트](/learn/courses/30/lessons/42885) | [구명보트.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/구명보트.js) | -| 20 | [기능개발](/learn/courses/30/lessons/42586) | [기능개발.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/기능개발.js) | -| 21 | [다리를 지나는 트럭](/learn/courses/30/lessons/42583) | [다리를-지나는-트럭.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/다리를-지나는-트럭.js) | -| 22 | [다음 큰 숫자](/learn/courses/30/lessons/12911) | [다음-큰-숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/다음-큰-숫자.js) | -| 23 | [땅따먹기](/learn/courses/30/lessons/12913) | [땅따먹기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/땅따먹기.js) | -| 24 | [멀쩡한 사각형](/learn/courses/30/lessons/62048) | [멀쩡한-사각형.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/멀쩡한-사각형.js) | -| 25 | [메뉴 리뉴얼](/learn/courses/30/lessons/72411) | [메뉴-리뉴얼.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/메뉴-리뉴얼.js) | -| 26 | [문자열 압축](/learn/courses/30/lessons/60057) | [문자열-압축.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/문자열-압축.js) | -| 27 | [빛의 경로 사이클](/learn/courses/30/lessons/86052) | [빛의-경로-사이클.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/빛의-경로-사이클.js) | -| 28 | [삼각 달팽이](/learn/courses/30/lessons/68645) | [삼각-달팽이.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/삼각-달팽이.js) | -| 29 | [소수 찾기](/learn/courses/30/lessons/42839) | [소수-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/소수-찾기.js) | -| 30 | [수식 최대화](/learn/courses/30/lessons/67257) | [수식-최대화.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/수식-최대화.js) | -| 31 | [숫자의 표현](/learn/courses/30/lessons/12924) | [숫자의-표현.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/숫자의-표현.js) | -| 32 | [스킬트리](/learn/courses/30/lessons/49993) | [스킬트리.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/스킬트리.js) | -| 33 | [영어 끝말잇기](/learn/courses/30/lessons/12981) | [영어-끝말잇기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/영어-끝말잇기.js) | -| 34 | [예상 대진표](/learn/courses/30/lessons/12985) | [예상-대진표.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/예상-대진표.js) | -| 35 | [오픈채팅방 ](/learn/courses/30/lessons/42888) | [오픈채팅방.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/오픈채팅방.js) | -| 36 | [올바른 괄호](/learn/courses/30/lessons/12909) | [올바른-괄호.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/올바른-괄호.js) | -| 37 | [위장](/learn/courses/30/lessons/42578) | [위장.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/위장.js) | -| 38 | [점프와 순간 이동](/learn/courses/30/lessons/12980) | [점프와-순간-이동.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/점프와-순간-이동.js) | -| 39 | [조이스틱](/learn/courses/30/lessons/42860) | [조이스틱.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/조이스틱.js) | -| 40 | [주차 요금 계산](/learn/courses/30/lessons/92341) | [주차-요금-계산.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/주차-요금-계산.js) | -| 41 | [짝지어 제거하기](/learn/courses/30/lessons/12973) | [짝지어-제거하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/짝지어-제거하기.js) | -| 42 | [최댓값과 최솟값](/learn/courses/30/lessons/12939) | [최댓값과-최솟값.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/최댓값과-최솟값.js) | -| 43 | [최솟값 만들기](/learn/courses/30/lessons/12941) | [최솟값-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/최솟값-만들기.js) | -| 44 | [카펫](/learn/courses/30/lessons/42842) | [카펫.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/카펫.js) | -| 45 | [큰 수 만들기](/learn/courses/30/lessons/42883) | [큰-수-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/큰-수-만들기.js) | -| 46 | [타겟 넘버](/learn/courses/30/lessons/43165) | [타겟-넘버.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/타겟-넘버.js) | -| 47 | [튜플](/learn/courses/30/lessons/64065) | [튜플.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/튜플.js) | -| 48 | [프린터](/learn/courses/30/lessons/42587) | [프린터.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/프린터.js) | -| 49 | [피보나치 수](/learn/courses/30/lessons/12945) | [피보나치-수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/피보나치-수.js) | -| 50 | [행렬 테두리 회전하기](/learn/courses/30/lessons/77485) | [행렬-테두리-회전하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/행렬-테두리-회전하기.js) | -| 51 | [행렬의 곱셈](/learn/courses/30/lessons/12949) | [행렬의-곱셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/행렬의-곱셈.js) | -| 52 | [후보키](/learn/courses/30/lessons/42890) | [후보키.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/후보키.js) | +| 1 | [124 나라의 숫자](https://school.programmers.co.kr//learn/courses/30/lessons/12899) | [124-나라의-숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/124-나라의-숫자.js) | +| 2 | [2개 이하로 다른 비트](https://school.programmers.co.kr//learn/courses/30/lessons/77885) | [2개-이하로-다른-비트.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/2개-이하로-다른-비트.js) | +| 3 | [H-Index](https://school.programmers.co.kr//learn/courses/30/lessons/42747) | [H-Index.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/H-Index.js) | +| 4 | [JadenCase 문자열 만들기](https://school.programmers.co.kr//learn/courses/30/lessons/12951) | [JadenCase-문자열-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/JadenCase-문자열-만들기.js) | +| 5 | [N개의 최소공배수](https://school.programmers.co.kr//learn/courses/30/lessons/12953) | [N개의-최소공배수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/N개의-최소공배수.js) | +| 6 | [[1차] 뉴스 클러스터링](https://school.programmers.co.kr//learn/courses/30/lessons/17677) | [[1차]-뉴스-클러스터링.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[1차]-뉴스-클러스터링.js) | +| 7 | [[1차] 캐시](https://school.programmers.co.kr//learn/courses/30/lessons/17680) | [[1차]-캐시.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[1차]-캐시.js) | +| 8 | [[3차] n진수 게임](https://school.programmers.co.kr//learn/courses/30/lessons/17687) | [[3차]-n진수-게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-n진수-게임.js) | +| 9 | [[3차] 방금그곡](https://school.programmers.co.kr//learn/courses/30/lessons/17683) | [[3차]-방금그곡.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-방금그곡.js) | +| 10 | [[3차] 파일명 정렬](https://school.programmers.co.kr//learn/courses/30/lessons/17686) | [[3차]-파일명-정렬.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-파일명-정렬.js) | +| 11 | [k진수에서 소수 개수 구하기](https://school.programmers.co.kr//learn/courses/30/lessons/92335) | [k진수에서-소수-개수-구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/k진수에서-소수-개수-구하기.js) | +| 12 | [n^2 배열 자르기](https://school.programmers.co.kr//learn/courses/30/lessons/87390) | [n^2-배열-자르기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/n^2-배열-자르기.js) | +| 13 | [가장 큰 수](https://school.programmers.co.kr//learn/courses/30/lessons/42746) | [가장-큰-수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/가장-큰-수.js) | +| 14 | [가장 큰 정사각형 찾기](https://school.programmers.co.kr//learn/courses/30/lessons/12905) | [가장-큰-정사각형-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/가장-큰-정사각형-찾기.js) | +| 15 | [거리두기 확인하기](https://school.programmers.co.kr//learn/courses/30/lessons/81302) | [거리두기-확인하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/거리두기-확인하기.js) | +| 16 | [게임 맵 최단거리](https://school.programmers.co.kr//learn/courses/30/lessons/1844) | [게임-맵-최단거리.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/게임-맵-최단거리.js) | +| 17 | [괄호 변환](https://school.programmers.co.kr//learn/courses/30/lessons/60058) | [괄호-변환.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/괄호-변환.js) | +| 18 | [괄호 회전하기](https://school.programmers.co.kr//learn/courses/30/lessons/76502) | [괄호-회전하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/괄호-회전하기.js) | +| 19 | [구명보트](https://school.programmers.co.kr//learn/courses/30/lessons/42885) | [구명보트.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/구명보트.js) | +| 20 | [기능개발](https://school.programmers.co.kr//learn/courses/30/lessons/42586) | [기능개발.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/기능개발.js) | +| 21 | [다리를 지나는 트럭](https://school.programmers.co.kr//learn/courses/30/lessons/42583) | [다리를-지나는-트럭.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/다리를-지나는-트럭.js) | +| 22 | [다음 큰 숫자](https://school.programmers.co.kr//learn/courses/30/lessons/12911) | [다음-큰-숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/다음-큰-숫자.js) | +| 23 | [땅따먹기](https://school.programmers.co.kr//learn/courses/30/lessons/12913) | [땅따먹기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/땅따먹기.js) | +| 24 | [멀쩡한 사각형](https://school.programmers.co.kr//learn/courses/30/lessons/62048) | [멀쩡한-사각형.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/멀쩡한-사각형.js) | +| 25 | [메뉴 리뉴얼](https://school.programmers.co.kr//learn/courses/30/lessons/72411) | [메뉴-리뉴얼.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/메뉴-리뉴얼.js) | +| 26 | [문자열 압축](https://school.programmers.co.kr//learn/courses/30/lessons/60057) | [문자열-압축.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/문자열-압축.js) | +| 27 | [빛의 경로 사이클](https://school.programmers.co.kr//learn/courses/30/lessons/86052) | [빛의-경로-사이클.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/빛의-경로-사이클.js) | +| 28 | [삼각 달팽이](https://school.programmers.co.kr//learn/courses/30/lessons/68645) | [삼각-달팽이.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/삼각-달팽이.js) | +| 29 | [소수 찾기](https://school.programmers.co.kr//learn/courses/30/lessons/42839) | [소수-찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/소수-찾기.js) | +| 30 | [수식 최대화](https://school.programmers.co.kr//learn/courses/30/lessons/67257) | [수식-최대화.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/수식-최대화.js) | +| 31 | [숫자의 표현](https://school.programmers.co.kr//learn/courses/30/lessons/12924) | [숫자의-표현.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/숫자의-표현.js) | +| 32 | [스킬트리](https://school.programmers.co.kr//learn/courses/30/lessons/49993) | [스킬트리.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/스킬트리.js) | +| 33 | [영어 끝말잇기](https://school.programmers.co.kr//learn/courses/30/lessons/12981) | [영어-끝말잇기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/영어-끝말잇기.js) | +| 34 | [예상 대진표](https://school.programmers.co.kr//learn/courses/30/lessons/12985) | [예상-대진표.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/예상-대진표.js) | +| 35 | [오픈채팅방 ](https://school.programmers.co.kr//learn/courses/30/lessons/42888) | [오픈채팅방.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/오픈채팅방.js) | +| 36 | [올바른 괄호](https://school.programmers.co.kr//learn/courses/30/lessons/12909) | [올바른-괄호.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/올바른-괄호.js) | +| 37 | [위장](https://school.programmers.co.kr//learn/courses/30/lessons/42578) | [위장.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/위장.js) | +| 38 | [점프와 순간 이동](https://school.programmers.co.kr//learn/courses/30/lessons/12980) | [점프와-순간-이동.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/점프와-순간-이동.js) | +| 39 | [조이스틱](https://school.programmers.co.kr//learn/courses/30/lessons/42860) | [조이스틱.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/조이스틱.js) | +| 40 | [주차 요금 계산](https://school.programmers.co.kr//learn/courses/30/lessons/92341) | [주차-요금-계산.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/주차-요금-계산.js) | +| 41 | [짝지어 제거하기](https://school.programmers.co.kr//learn/courses/30/lessons/12973) | [짝지어-제거하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/짝지어-제거하기.js) | +| 42 | [최댓값과 최솟값](https://school.programmers.co.kr//learn/courses/30/lessons/12939) | [최댓값과-최솟값.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/최댓값과-최솟값.js) | +| 43 | [최솟값 만들기](https://school.programmers.co.kr//learn/courses/30/lessons/12941) | [최솟값-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/최솟값-만들기.js) | +| 44 | [카펫](https://school.programmers.co.kr//learn/courses/30/lessons/42842) | [카펫.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/카펫.js) | +| 45 | [큰 수 만들기](https://school.programmers.co.kr//learn/courses/30/lessons/42883) | [큰-수-만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/큰-수-만들기.js) | +| 46 | [타겟 넘버](https://school.programmers.co.kr//learn/courses/30/lessons/43165) | [타겟-넘버.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/타겟-넘버.js) | +| 47 | [튜플](https://school.programmers.co.kr//learn/courses/30/lessons/64065) | [튜플.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/튜플.js) | +| 48 | [프린터](https://school.programmers.co.kr//learn/courses/30/lessons/42587) | [프린터.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/프린터.js) | +| 49 | [피보나치 수](https://school.programmers.co.kr//learn/courses/30/lessons/12945) | [피보나치-수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/피보나치-수.js) | +| 50 | [행렬 테두리 회전하기](https://school.programmers.co.kr//learn/courses/30/lessons/77485) | [행렬-테두리-회전하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/행렬-테두리-회전하기.js) | +| 51 | [행렬의 곱셈](https://school.programmers.co.kr//learn/courses/30/lessons/12949) | [행렬의-곱셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/행렬의-곱셈.js) | +| 52 | [후보키](https://school.programmers.co.kr//learn/courses/30/lessons/42890) | [후보키.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/후보키.js) | ### Level 3 👨🏻‍💻(풀이 중..) @@ -172,15 +172,15 @@ | 번호 | 문제 출처 | 풀이 | | --- | ------- | --- | -| 1 | [2 x n 타일링](/learn/courses/30/lessons/12900) | [2-x-n-타일링.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/2-x-n-타일링.js) | -| 2 | [N-Queen](/learn/courses/30/lessons/12952) | [N-Queen.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/N-Queen.js) | -| 3 | [가장 먼 노드](/learn/courses/30/lessons/49189) | [가장-먼-노드.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/가장-먼-노드.js) | -| 4 | [네트워크](/learn/courses/30/lessons/43162) | [네트워크.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/네트워크.js) | -| 5 | [단속카메라](/learn/courses/30/lessons/42884) | [단속카메라.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/단속카메라.js) | -| 6 | [베스트앨범](/learn/courses/30/lessons/42579) | [베스트앨범.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/베스트앨범.js) | -| 7 | [여행경로](/learn/courses/30/lessons/43164) | [여행경로.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/여행경로.js) | -| 8 | [이중우선순위큐](/learn/courses/30/lessons/42628) | [이중우선순위큐.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/이중우선순위큐.js) | -| 9 | [입국심사](/learn/courses/30/lessons/43238) | [입국심사.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/입국심사.js) | +| 1 | [2 x n 타일링](https://school.programmers.co.kr//learn/courses/30/lessons/12900) | [2-x-n-타일링.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/2-x-n-타일링.js) | +| 2 | [N-Queen](https://school.programmers.co.kr//learn/courses/30/lessons/12952) | [N-Queen.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/N-Queen.js) | +| 3 | [가장 먼 노드](https://school.programmers.co.kr//learn/courses/30/lessons/49189) | [가장-먼-노드.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/가장-먼-노드.js) | +| 4 | [네트워크](https://school.programmers.co.kr//learn/courses/30/lessons/43162) | [네트워크.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/네트워크.js) | +| 5 | [단속카메라](https://school.programmers.co.kr//learn/courses/30/lessons/42884) | [단속카메라.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/단속카메라.js) | +| 6 | [베스트앨범](https://school.programmers.co.kr//learn/courses/30/lessons/42579) | [베스트앨범.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/베스트앨범.js) | +| 7 | [여행경로](https://school.programmers.co.kr//learn/courses/30/lessons/43164) | [여행경로.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/여행경로.js) | +| 8 | [이중우선순위큐](https://school.programmers.co.kr//learn/courses/30/lessons/42628) | [이중우선순위큐.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/이중우선순위큐.js) | +| 9 | [입국심사](https://school.programmers.co.kr//learn/courses/30/lessons/43238) | [입국심사.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/입국심사.js) | ### Level 4 @@ -190,7 +190,7 @@ | 번호 | 문제 출처 | 풀이 | | --- | ------- | --- | -| 1 | [단어 퍼즐](/learn/courses/30/lessons/12983) | [단어-퍼즐.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-4/단어-퍼즐.js) | +| 1 | [단어 퍼즐](https://school.programmers.co.kr//learn/courses/30/lessons/12983) | [단어-퍼즐.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-4/단어-퍼즐.js) | ### Level 5 diff --git a/utils/string.js b/utils/string.js index d2f0966..12fe79a 100644 --- a/utils/string.js +++ b/utils/string.js @@ -1,6 +1,6 @@ -import * as fs from 'fs'; -import path from 'path'; -import fetchTitleLink from './fetch.js'; +import * as fs from "fs"; +import path from "path"; +import fetchTitleLink from "./fetch.js"; const __dirname = path.resolve(); const titleLinkObject = await fetchTitleLink(); @@ -9,8 +9,8 @@ function getFileNameList(dir) { try { return fs .readdirSync(dir) - .map(fileName => fileName.normalize('NFC')) - .filter(fileName => fileName !== '00-해답-예시.js') + .map((fileName) => fileName.normalize("NFC")) + .filter((fileName) => fileName !== "00-해답-예시.js") .sort(); } catch (err) { return []; @@ -19,30 +19,30 @@ function getFileNameList(dir) { function checkException(title) { switch (title) { - case '수박수박수박수박수박수': - return '수박수박수박수박수박수?'; - case 'H Index': - return 'H-Index'; - case 'N Queen': - return 'N-Queen'; - case '오픈채팅방': - return '오픈채팅방 '; + case "수박수박수박수박수박수": + return "수박수박수박수박수박수?"; + case "H Index": + return "H-Index"; + case "N Queen": + return "N-Queen"; + case "오픈채팅방": + return "오픈채팅방 "; default: return title; } } function getTitle(fileName) { - const title = fileName.split('-').join(' ').slice(0, -3); + const title = fileName.split("-").join(" ").slice(0, -3); return checkException(title); } export function getInfoList(levelNumber) { const levelDir = path.resolve(__dirname, `./level-${levelNumber}`); const fileNameList = getFileNameList(levelDir); - const infoList = fileNameList.map(fileName => { + const infoList = fileNameList.map((fileName) => { const title = getTitle(fileName); - const link = titleLinkObject[title]; + const link = "https://school.programmers.co.kr/" + titleLinkObject[title]; return { title, link, fileName, levelNumber }; }); return infoList; @@ -55,9 +55,9 @@ function makeReadmeStr(infoItem, index) { } export function getTableStr(levelNumber) { - if (getInfoList(levelNumber).length === 0) return ''; + if (getInfoList(levelNumber).length === 0) return ""; return getInfoList(levelNumber) .map((item, index) => makeReadmeStr(item, index)) - .join('\n'); + .join("\n"); } From 031c52dfb04b42c003ad00f669118c1eefe029aa Mon Sep 17 00:00:00 2001 From: Jaeyeong son Date: Sat, 23 Jul 2022 14:54:50 +0900 Subject: [PATCH 09/13] =?UTF-8?q?[=EC=86=90=EC=9E=AC=EC=98=81]=20level2=20?= =?UTF-8?q?=EB=B0=B0=EB=8B=AC=20=ED=92=80=EC=9D=B4=20=EB=B0=8F=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "level-2/\353\260\260\353\213\254.js" | 189 ++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 "level-2/\353\260\260\353\213\254.js" diff --git "a/level-2/\353\260\260\353\213\254.js" "b/level-2/\353\260\260\353\213\254.js" new file mode 100644 index 0000000..50a350c --- /dev/null +++ "b/level-2/\353\260\260\353\213\254.js" @@ -0,0 +1,189 @@ +//정답 1 - pereng11 +// 다익스트라 + 최소힙 O( N * logN ) +function solution ( N, road, K ) +{ + // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 + class MinHeap{ + constructor () + { + this.heap = [ null ]; + } + // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬 + push ( val ) + { + this.heap.push(val); + let childIdx = this.heap.length-1; + let parentIdx = Math.floor(childIdx / 2); + while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){ + this.swap( childIdx, parentIdx ); + childIdx = parentIdx; + parentIdx = Math.floor(childIdx / 2); + } + } + pop () + { + if ( this.heap.length === 1 ) + { + return undefined; + } + // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬 + const minNode = this.heap[ 1 ]; + this.heap[ 1 ] = this.heap[ this.heap.length - 1 ]; + this.heap.pop(); + let parentIdx = 1; + let leftChildIdx = 2; + let rightChildIdx = 3; + while ( parentIdx < this.heap.length ) + { + // 자식이 없는 경우 + if ( !this.heap[ leftChildIdx ] ) + { + break; + } // 왼쪽 자식만 있는 경우 + else if ( !this.heap[ rightChildIdx ] ) + { + if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] ) + { + this.swap( parentIdx, leftChildIdx ); + } + break; + // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬 + } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] ) + { + const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx; + this.swap( parentIdx, minChildIdx ); + parentIdx = minChildIdx; + leftChildIdx = parentIdx * 2 + rightChildIdx = parentIdx * 2 + 1; + } else + { + // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지 + break; + } + } + return minNode; + } + swap ( idx1, idx2 ) + { + [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ]; + } + length () + { + return this.heap.length; + } + } + + + const roadsTable = {}; //전체 도로 정보 + + // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 + for ( let i = 1; i <= N; i++ ) + { + roadsTable[ i ] = []; + } + road.forEach( road => + { + let [ sp, ep, dist ] = road; + roadsTable[ sp ].push( [ ep, dist ] ); + roadsTable[ ep ].push( [ sp, dist ] ); + } ); + + function djikstra ( sp ) + { + const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열 + const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 + const heap = new MinHeap(); + + //시작점 삽입 + heap.push( [sp, 0] ); + + // 가장 가까운 목적지부터 순서대로 방문 + while ( heap.length() > 1 ) + { + //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리] + const [ ep, val ] = heap.pop(); + //아직 방문하지 않은 곳만 처리 + if ( !visited[ ep ] ) + { + //방문처리, 거리 저장 + visited[ ep ] = true; + dist[ ep ] = val; + //방문 지점을 거쳐서 가는 다른 목적지 구하기 + const nexts = roadsTable[ ep ]; + if ( nexts ) + { + nexts.forEach( n => + { + let [ nextEp, nextVal ] = n; + if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 + { + heap.push( [ nextEp, val + nextVal ] ); + } + }) + } + } + } + // 거리가 K이하인 지점의 개수 반환 + const result = dist.filter( d => d <= K ).length; + return result; + } + + const answer = djikstra( 1 ); + return answer; +} + +//정답 2 - pereng11 O(N * N); +//다익스트라 + 선형탐색 +function solution ( N, road, K ) +{ + + const roadsTable = {}; //전체 도로 정보 + + // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 + for ( let i = 1; i <= N; i++ ) + { + roadsTable[ i ] = []; + } + road.forEach( road => + { + let [ sp, ep, dist ] = road; + roadsTable[ sp ].push( [ ep, dist ] ); + roadsTable[ ep ].push( [ sp, dist ] ); + } ); + + function djikstra ( sp ) + { + const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 + const queue = []; + + queue.push( [sp, 0] ); + + while ( queue.length > 0 ) + { + const [ ep, val ] = queue.shift(); + if ( dist[ ep ] > val ) + { + dist[ ep ] = val; + const nexts = roadsTable[ ep ]; + if ( nexts ) + { + nexts.forEach( n => + { + let [ nextEp, nextVal ] = n; + //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 + if ( dist[ nextEp ] > val + nextVal ) + { + queue.push( [ nextEp, val + nextVal ] ); + } + } ); + } + } + } + // 거리가 K이하인 지점의 개수 반환 + const result = dist.filter( d => d <= K ).length; + return result; + } + + const answer = djikstra( 1 ); + return answer; +} \ No newline at end of file From d2b9fd39aceb0ab2fd2c33e7139e15a2f8d4e043 Mon Sep 17 00:00:00 2001 From: iHoHyeon Date: Sun, 24 Jul 2022 15:58:51 +0900 Subject: [PATCH 10/13] =?UTF-8?q?solution=20=EA=B5=AC=EB=AA=85=EB=B3=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\353\252\205\353\263\264\355\212\270.js" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git "a/level-2/\352\265\254\353\252\205\353\263\264\355\212\270.js" "b/level-2/\352\265\254\353\252\205\353\263\264\355\212\270.js" index c6819b5..3bfd2a7 100644 --- "a/level-2/\352\265\254\353\252\205\353\263\264\355\212\270.js" +++ "b/level-2/\352\265\254\353\252\205\353\263\264\355\212\270.js" @@ -40,4 +40,27 @@ function solution(people, limit) { } return count; +} + +// 정답 3 - iHoHyeon +function solution(people, limit) { + people.sort((a, b) => a - b); // 오름차순 정렬 + + let cnt = 0; // 구명보트 개수 + + let front = 0; // 가장 몸무게가 작은 사람의 index + let last = people.length; // 가장 몸무게가 큰 사람의 index + + while (last > front) { + cnt++; + + const now = people.pop(); + last--; + + if (now + people[front] <= limit) { + front++; // shift() 연산의 비효율로 인해 front 사용 + } + } + + return cnt; } \ No newline at end of file From 8938fca9f0de91b554c407f81518732cc7685394 Mon Sep 17 00:00:00 2001 From: Jaeyeong son Date: Mon, 25 Jul 2022 20:38:10 +0900 Subject: [PATCH 11/13] =?UTF-8?q?fix:=20=EC=B5=9C=EC=86=8C=ED=9E=99=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=B0=94=EA=B9=A5=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC&=ED=8C=8C=EC=9D=BC=20=EC=BB=A8=EB=B2=A4=EC=85=98=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "level-2/\353\260\260\353\213\254.js" | 129 +++++++++++++------------- 1 file changed, 65 insertions(+), 64 deletions(-) diff --git "a/level-2/\353\260\260\353\213\254.js" "b/level-2/\353\260\260\353\213\254.js" index 50a350c..fb70325 100644 --- "a/level-2/\353\260\260\353\213\254.js" +++ "b/level-2/\353\260\260\353\213\254.js" @@ -1,79 +1,81 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. + //정답 1 - pereng11 // 다익스트라 + 최소힙 O( N * logN ) -function solution ( N, road, K ) -{ // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 - class MinHeap{ - constructor () - { - this.heap = [ null ]; - } - // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬 - push ( val ) +class MinHeap{ + constructor () + { + this.heap = [ null ]; + } + // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬 + push ( val ) + { + this.heap.push(val); + let childIdx = this.heap.length-1; + let parentIdx = Math.floor(childIdx / 2); + while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){ + this.swap( childIdx, parentIdx ); + childIdx = parentIdx; + parentIdx = Math.floor(childIdx / 2); + } + } + pop () + { + if ( this.heap.length === 1 ) { - this.heap.push(val); - let childIdx = this.heap.length-1; - let parentIdx = Math.floor(childIdx / 2); - while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){ - this.swap( childIdx, parentIdx ); - childIdx = parentIdx; - parentIdx = Math.floor(childIdx / 2); - } + return undefined; } - pop () + // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬 + const minNode = this.heap[ 1 ]; + this.heap[ 1 ] = this.heap[ this.heap.length - 1 ]; + this.heap.pop(); + let parentIdx = 1; + let leftChildIdx = 2; + let rightChildIdx = 3; + while ( parentIdx < this.heap.length ) { - if ( this.heap.length === 1 ) + // 자식이 없는 경우 + if ( !this.heap[ leftChildIdx ] ) { - return undefined; - } - // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬 - const minNode = this.heap[ 1 ]; - this.heap[ 1 ] = this.heap[ this.heap.length - 1 ]; - this.heap.pop(); - let parentIdx = 1; - let leftChildIdx = 2; - let rightChildIdx = 3; - while ( parentIdx < this.heap.length ) + break; + } // 왼쪽 자식만 있는 경우 + else if ( !this.heap[ rightChildIdx ] ) { - // 자식이 없는 경우 - if ( !this.heap[ leftChildIdx ] ) - { - break; - } // 왼쪽 자식만 있는 경우 - else if ( !this.heap[ rightChildIdx ] ) - { - if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] ) - { - this.swap( parentIdx, leftChildIdx ); - } - break; - // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬 - } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] ) - { - const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx; - this.swap( parentIdx, minChildIdx ); - parentIdx = minChildIdx; - leftChildIdx = parentIdx * 2 - rightChildIdx = parentIdx * 2 + 1; - } else + if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] ) { - // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지 - break; + this.swap( parentIdx, leftChildIdx ); } + break; + // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬 + } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] ) + { + const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx; + this.swap( parentIdx, minChildIdx ); + parentIdx = minChildIdx; + leftChildIdx = parentIdx * 2 + rightChildIdx = parentIdx * 2 + 1; + } else + { + // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지 + break; } - return minNode; } - swap ( idx1, idx2 ) - { - [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ]; - } - length () - { - return this.heap.length; - } - } + return minNode; + } + swap ( idx1, idx2 ) + { + [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ]; + } + length () + { + return this.heap.length; + } +} - +function solution ( N, road, K ) +{ const roadsTable = {}; //전체 도로 정보 // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 @@ -136,7 +138,6 @@ function solution ( N, road, K ) //다익스트라 + 선형탐색 function solution ( N, road, K ) { - const roadsTable = {}; //전체 도로 정보 // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 From d503fd8524e58558646898456429de2acca0d3f7 Mon Sep 17 00:00:00 2001 From: JaeyeongSon Date: Mon, 8 Aug 2022 16:36:19 +0900 Subject: [PATCH 12/13] =?UTF-8?q?solution:=20level2=20-=20=ED=94=BC?= =?UTF-8?q?=EB=A1=9C=EB=8F=84=20=EB=AC=B8=EC=A0=9C=20=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\355\224\274\353\241\234\353\217\204.js" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "level-2/\355\224\274\353\241\234\353\217\204.js" diff --git "a/level-2/\355\224\274\353\241\234\353\217\204.js" "b/level-2/\355\224\274\353\241\234\353\217\204.js" new file mode 100644 index 0000000..ee4d238 --- /dev/null +++ "b/level-2/\355\224\274\353\241\234\353\217\204.js" @@ -0,0 +1,22 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - pereng11 +//완전 탐색, greedy O(N^2) + function solution(k, dungeons) { + let answer = 0; + const visited = new Array(dungeons.length).fill(false); + function dfs(k, total){ + answer = Math.max( answer, total ); + //모든 포인트를 출발점으로 전체 경우의 수 탐색 + //0번 인덱스를 출발로 삼은 greedy 탐색이 끝나면 1번 인덱스를 출발점으로 ~ 마지막 인덱스까지 반복 + for(let i = 0; i < dungeons.length; i++){ + if(!visited[i] && dungeons[i][0] <= k){ + visited[i] = true; + dfs(k - dungeons[i][1], total+1); + visited[i] = false; + } + } + } + dfs(k, 0); + return answer; +} From 597555afc55d6eea2f44ba790adb0802135f9c44 Mon Sep 17 00:00:00 2001 From: JaeyeongSon Date: Fri, 12 Aug 2022 18:08:43 +0900 Subject: [PATCH 13/13] =?UTF-8?q?refactor:=20level2=20-=20=ED=94=BC?= =?UTF-8?q?=EB=A1=9C=EB=8F=84(=EA=B0=80=EB=8F=85=EC=84=B1=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 최대한 순수함수에 가깝도록, 함수 내부에서 외부 변수를 참조하거나 조작하지 않도록 수정하였습니다. 2. 변수와 함수 이름을 수정하여 의미를 명확히 하였습니다. 3. 로직의 목적을 쉽게 파악할 수 있도록 일반 for문 대신 배열 메서드를 적극 활용하였습니다. --- .../\355\224\274\353\241\234\353\217\204.js" | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git "a/level-2/\355\224\274\353\241\234\353\217\204.js" "b/level-2/\355\224\274\353\241\234\353\217\204.js" index ee4d238..94a234d 100644 --- "a/level-2/\355\224\274\353\241\234\353\217\204.js" +++ "b/level-2/\355\224\274\353\241\234\353\217\204.js" @@ -2,21 +2,27 @@ //완벽한 정답이 아닙니다. //정답 1 - pereng11 //완전 탐색, greedy O(N^2) - function solution(k, dungeons) { - let answer = 0; - const visited = new Array(dungeons.length).fill(false); - function dfs(k, total){ - answer = Math.max( answer, total ); - //모든 포인트를 출발점으로 전체 경우의 수 탐색 - //0번 인덱스를 출발로 삼은 greedy 탐색이 끝나면 1번 인덱스를 출발점으로 ~ 마지막 인덱스까지 반복 - for(let i = 0; i < dungeons.length; i++){ - if(!visited[i] && dungeons[i][0] <= k){ - visited[i] = true; - dfs(k - dungeons[i][1], total+1); - visited[i] = false; - } - } - } - dfs(k, 0); - return answer; +function solution(currentFatigue, dungeons) { + return getMaxCount(currentFatigue, 0, dungeons); } + +function getMaxCount(currentFatigue, visitedCount, dungeons) { + const possibleDungeons = dungeons.filter(([minNeededFatigue, _]) => minNeededFatigue <= currentFatigue); + if (possibleDungeons.length === 0) return visitedCount; + + const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => { + const [_, usedFatigue] = curr; + const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex); + const currentCount = getMaxCount( + currentFatigue - usedFatigue, + visitedCount + 1, + nextDungeons + ); + return Math.max(currentCount, prevCount); + }, 0); + + return maxCount; +} + + +