From fad0e043806146b70946de9485901a3dff57b68a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Wed, 30 Dec 2020 13:29:52 +0900 Subject: [PATCH 01/49] solve: boj 2178 --- ...0\353\241\234\355\203\220\354\203\211.cpp" | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 "src/kyu9341/boj2178_\353\257\270\353\241\234\355\203\220\354\203\211/2178_\353\257\270\353\241\234\355\203\220\354\203\211.cpp" diff --git "a/src/kyu9341/boj2178_\353\257\270\353\241\234\355\203\220\354\203\211/2178_\353\257\270\353\241\234\355\203\220\354\203\211.cpp" "b/src/kyu9341/boj2178_\353\257\270\353\241\234\355\203\220\354\203\211/2178_\353\257\270\353\241\234\355\203\220\354\203\211.cpp" new file mode 100644 index 0000000..35732a0 --- /dev/null +++ "b/src/kyu9341/boj2178_\353\257\270\353\241\234\355\203\220\354\203\211/2178_\353\257\270\353\241\234\355\203\220\354\203\211.cpp" @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include + +using namespace std; + +const int MAX = 100; +int n, m; +int dx[] = { 0, 0, 1, -1 }; +int dy[] = { 1, -1, 0, 0 }; +int map[MAX + 1][MAX + 1]; +int dist[MAX + 1][MAX + 1]; +queue< pair > q; + +void bfs(int sx, int sy) { + q.push(make_pair(sx, sy)); + dist[sx][sy] = 1; + + while(!q.empty()) { + int x = q.front().first; + int y = q.front().second; + q.pop(); + + for (int i = 0; i < 4; i++) { + int nx = x + dx[i]; + int ny = y + dy[i]; + + if (!(nx >= 0 && ny >= 0 && nx < n && ny < m)) continue; + if (dist[nx][ny] != -1 || map[nx][ny] != 1) continue; + q.push(make_pair(nx, ny)); + dist[nx][ny] = dist[x][y] + 1; + } + + if (dist[n - 1][m - 1] != -1) break; + } +} + +int main() { + + cin >> n >> m; + + memset(dist, -1, sizeof(dist)); + + for (int i = 0; i < n; i++) + for (int j = 0; j < m; j++) + scanf("%1d", &map[i][j]); + + bfs(0, 0); + + cout << dist[n - 1][m - 1] << '\n'; +} + +// C++ 사용자들 중에 숫자 하나씩을 떼어서 입력받고 싶어서 cin을 쓰다가 미로만 scanf로 입력받는 경우가 있습니다. 이 때에는 절대로 sync_with_stdio(false); 를 해서는 안 됩니다. From 2cdfaeb98ecd69010d86d415d4513b262287e2d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Wed, 30 Dec 2020 13:30:15 +0900 Subject: [PATCH 02/49] solve: boj 2502 --- ...4\355\230\270\353\236\221\354\235\264.cpp" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "src/kyu9341/boj2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264.cpp" diff --git "a/src/kyu9341/boj2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264.cpp" "b/src/kyu9341/boj2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264.cpp" new file mode 100644 index 0000000..787b265 --- /dev/null +++ "b/src/kyu9341/boj2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264.cpp" @@ -0,0 +1,36 @@ +#include +#include + +using namespace std; + +int day, cake; + +int main() { + int A, B; + + cin >> day >> cake; + vector< pair > d(day + 1); + + d[1] = make_pair(1, 0); + d[2] = make_pair(0, 1); + + for (int i = 3; i <= day; i++) { + d[i].first = d[i - 1].first + d[i - 2].first; + d[i].second = d[i - 1].second + d[i - 2].second; + } + + for (int i = 1; i <= cake; i++) { + int cntA = d[day].first; + int cntB = d[day].second; + + if ((cake - cntA * i) % cntB == 0) { + A = i; + B = (cake - cntA * A) / cntB; + break; + } + } + + cout << A << '\n' << B << '\n'; +} + + From 96b8a28408eeeeee1ce532adefb86ca53ffc8b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Wed, 30 Dec 2020 13:30:31 +0900 Subject: [PATCH 03/49] solve: boj 2644 --- ...4\354\210\230\352\263\204\354\202\260.cpp" | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 "src/kyu9341/boj2644_\354\264\214\354\210\230\352\263\204\354\202\260/2644_\354\264\214\354\210\230\352\263\204\354\202\260.cpp" diff --git "a/src/kyu9341/boj2644_\354\264\214\354\210\230\352\263\204\354\202\260/2644_\354\264\214\354\210\230\352\263\204\354\202\260.cpp" "b/src/kyu9341/boj2644_\354\264\214\354\210\230\352\263\204\354\202\260/2644_\354\264\214\354\210\230\352\263\204\354\202\260.cpp" new file mode 100644 index 0000000..6f91eec --- /dev/null +++ "b/src/kyu9341/boj2644_\354\264\214\354\210\230\352\263\204\354\202\260/2644_\354\264\214\354\210\230\352\263\204\354\202\260.cpp" @@ -0,0 +1,52 @@ +#include +#include +#include +#include +#include + +using namespace std; + +const int MAX = 100; +int n, m; +vector v[MAX + 1]; +int dist[MAX + 1]; + +int main() { + ios_base::sync_with_stdio(false); + cin.tie(nullptr); + cout.tie(nullptr); + + int x, y; + + cin >> n >> x >> y >> m; + + memset(dist, -1, sizeof(dist)); + int parent, child; + + while (m--) { + cin >> parent >> child; + v[parent].push_back(child); + v[child].push_back(parent); + } + + queue q; + dist[x] = 0; + q.push(x); + + while(!q.empty()) { + int cur = q.front(); + q.pop(); + + for (int i = 0; i < v[cur].size(); i++) { + int next = v[cur][i]; + if (dist[next] != -1) continue; + dist[next] = dist[cur] + 1; + q.push(next); + } + + if (dist[y] != -1) break; + } + + cout << dist[y] << '\n'; +} + From a71058441e9e52d1fcb1dfc524f1fe4c3b9b01df Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Wed, 30 Dec 2020 14:09:31 +0900 Subject: [PATCH 04/49] =?UTF-8?q?13=ED=9A=8C=EC=B0=A8=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=20=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/boj/2011.md | 18 ++++++++++++++++ src/grap3fruit/boj/2011.py | 43 ++++++++++++++++++++++++++++++++++++++ src/grap3fruit/boj/2502.md | 2 +- src/grap3fruit/boj/2644.py | 3 --- 4 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 src/grap3fruit/boj/2011.md create mode 100644 src/grap3fruit/boj/2011.py diff --git a/src/grap3fruit/boj/2011.md b/src/grap3fruit/boj/2011.md new file mode 100644 index 0000000..bf0d914 --- /dev/null +++ b/src/grap3fruit/boj/2011.md @@ -0,0 +1,18 @@ +# 2011 - 힌트 + +## DP + +처음엔 모든 경우의 수를 구해서, + +2개씩 묶이는게 0 0 and int(input[0]) < 3: + dp[1] = 1 + else: + return 0 + + if int(input[1]) != 0: # input[1]이 0이 아니고, + if (int(input[1]) < 7 and int(input[0]) == 2) or int(input[0]) == 1: # 10 ~ 26 사이면 + dp[1] = 2 + else: + dp[1] = 1 + + if len(input) == 2: # 입력이 두개면 return + return dp[1] + + n = 2 + while n < len(input): # dp[2] 부터 여기서 구함. + if int(input[n]) > 0: # input[n]이 0보다 클 경우는 input[n-1]에 그대로 붙여줄 수 있음. + dp[n] = dp[n-1] + + # n,n-1이 10 ~ 26 사이면, dp[n-2]에 10~26을 붙일 수 있음. + if (int(input[n]) < 7 and int(input[n-1]) == 2) or int(input[n-1]) == 1: + dp[n] = (dp[n-2] + dp[n]) + + n += 1 + + return(dp[len(input)-1] % 1000000) + + +print(calc(input, dp)) diff --git a/src/grap3fruit/boj/2502.md b/src/grap3fruit/boj/2502.md index a0ee18a..3d9e872 100644 --- a/src/grap3fruit/boj/2502.md +++ b/src/grap3fruit/boj/2502.md @@ -11,6 +11,6 @@ dp[2] = 'b' dp[K] = 'bababbab' 이런식으로 나온다. 이걸 -count_a _ j + count_b _ i == K 식으로 바꿔서 +count_a x j + count_b x i == K 식으로 바꿔서 i, j 이중포문 돌려서 구함 diff --git a/src/grap3fruit/boj/2644.py b/src/grap3fruit/boj/2644.py index b391fde..353c60d 100644 --- a/src/grap3fruit/boj/2644.py +++ b/src/grap3fruit/boj/2644.py @@ -41,9 +41,6 @@ def solution(N, A, B, M, dic): if (A in result_A) and (B in result_B): intersec = result_A & result_B - # if len(result_A - intersec) == 1 and len(result_B - intersec) == 1: - # return 1 - return abs(len(result_A - intersec) + len(result_B - intersec)) return -1 From a4db352ab7e765b220054e5b2e9e187e0fd8a34b Mon Sep 17 00:00:00 2001 From: SoonWon Kwon Date: Wed, 30 Dec 2020 14:12:48 +0900 Subject: [PATCH 05/49] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9bf110f..42a67d8 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ | 11주차 | [열차 시간표](https://www.acmicpc.net/problem/12731) | [정수 삼각형](https://www.acmicpc.net/problem/1932) | [팰린드롬 만들기](https://www.acmicpc.net/problem/1254) | | | 12주차 | [ATM](https://www.acmicpc.net/problem/11399) | [회문](https://www.acmicpc.net/problem/17609) | | | | 13주차 | [미로탐색](https://www.acmicpc.net/problem/2178) | [암호코드](https://www.acmicpc.net/problem/2011) | [떡먹는호랑이](https://www.acmicpc.net/problem/2502) | [촌수계산](https://www.acmicpc.net/problem/2644) | +| 14주차 | [크레인 인형뽑기](https://programmers.co.kr/learn/courses/30/lessons/64061) | [가장 긴 팰린드롬](https://programmers.co.kr/learn/courses/30/lessons/12904) | [튜플](https://programmers.co.kr/learn/courses/30/lessons/64065) | | ## :blue_book: Additional Study From 8899928212a9563823095cfeb932ec94a591526c Mon Sep 17 00:00:00 2001 From: Do-ho Date: Wed, 30 Dec 2020 20:30:34 +0900 Subject: [PATCH 06/49] =?UTF-8?q?solve:=20programmers=20=ED=81=AC=EB=A0=88?= =?UTF-8?q?=EC=9D=B8=EC=9D=B8=ED=98=95=EB=BD=91=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 단순 stack 구현 문제 - 직접 자료구조를 짜면서 해결 --- .../pgs_crane.js" | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 "src/Do-ho/implementation/pgs_\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260/pgs_crane.js" diff --git "a/src/Do-ho/implementation/pgs_\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260/pgs_crane.js" "b/src/Do-ho/implementation/pgs_\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260/pgs_crane.js" new file mode 100644 index 0000000..c01bbaa --- /dev/null +++ "b/src/Do-ho/implementation/pgs_\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260/pgs_crane.js" @@ -0,0 +1,45 @@ +class CraneStack { + constructor() { + this.store = []; + this.size = 0; + } + top() { + if(this.size==0) return 0; + return this.store[this.size-1]; + } + pushAndGetResult(item) { + if(this.top() === item) { + this.pop(); + this.size--; + return 2; + } + + this.store.push(item); + this.size++; + return 0; + } + pop() { return this.store.pop(); } +} + +const pickDoll = (board, x) => { + for(let i=0; i { + let answer = 0; + let basket = new CraneStack(); + + moves.forEach((item) => { + const doll = pickDoll(board, item-1); + if(doll!==0) answer += basket.pushAndGetResult(doll); + }) + + return answer; +} \ No newline at end of file From 3200a99dd0b32618c208241c99e762a106ee4df3 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Thu, 31 Dec 2020 03:03:58 +0900 Subject: [PATCH 07/49] =?UTF-8?q?docs=20:=20week14.md=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/week13.md | 2 +- src/do02reen24/Review/week14.md | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 src/do02reen24/Review/week14.md diff --git a/src/do02reen24/Review/week13.md b/src/do02reen24/Review/week13.md index 8624359..d9f5559 100644 --- a/src/do02reen24/Review/week13.md +++ b/src/do02reen24/Review/week13.md @@ -1,4 +1,4 @@ -# :fire: week12 +# :fire: week13 ## :ballot_box_with_check: 백준 2011 diff --git a/src/do02reen24/Review/week14.md b/src/do02reen24/Review/week14.md new file mode 100644 index 0000000..d4cefae --- /dev/null +++ b/src/do02reen24/Review/week14.md @@ -0,0 +1,9 @@ +# :fire: week14 + +- 이번주는 마이리얼트립 코딩테스트 준비를 위해 프로그래머스에서 `javascript`로 문제를 풀기로 하였다. + +## :ballot_box_with_check: 프로그래머스 튜플(64065) + +## :ballot_box_with_check: 프로그래머스 크레인 인형뽑기 게임(64061) + +## :ballot_box_with_check: 프로그래머스 가장 긴 팰린드롬(12904) From 3f654b86c30ffd816802e17288dfd72a3ab51900 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Thu, 31 Dec 2020 15:17:46 +0900 Subject: [PATCH 08/49] =?UTF-8?q?solve=20:=20programmers=20=ED=8A=9C?= =?UTF-8?q?=ED=94=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/week14.md | 3 ++ src/do02reen24/string/programmers_64065.js | 32 ++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/do02reen24/string/programmers_64065.js diff --git a/src/do02reen24/Review/week14.md b/src/do02reen24/Review/week14.md index d4cefae..be4b0b3 100644 --- a/src/do02reen24/Review/week14.md +++ b/src/do02reen24/Review/week14.md @@ -4,6 +4,9 @@ ## :ballot_box_with_check: 프로그래머스 튜플(64065) +- python으로 문제를 풀다가 javascript로 문제를 푸니 헷갈렸다. +- 변수명과 함수 분리를 신경써서 코드를 작성하였다. + ## :ballot_box_with_check: 프로그래머스 크레인 인형뽑기 게임(64061) ## :ballot_box_with_check: 프로그래머스 가장 긴 팰린드롬(12904) diff --git a/src/do02reen24/string/programmers_64065.js b/src/do02reen24/string/programmers_64065.js new file mode 100644 index 0000000..df4a831 --- /dev/null +++ b/src/do02reen24/string/programmers_64065.js @@ -0,0 +1,32 @@ +const countingNumber = (arr) => { + const counts = {}; + arr.forEach((n) => (counts[n] = (counts[n] || 0) + 1)); + return counts; +}; + +const sortByValue = (dict) => { + const arr = []; + for (const key in dict) { + const value = dict[key]; + arr.push([Number(key), value]); + } + return arr.sort((pre, next) => next[1] - pre[1]); +}; + +const getKeyList = (arr) => { + const keys = []; + for (const pair of arr) { + const key = pair[0]; + keys.push(key); + } + return keys; +}; + +const solution = (s) => { + const deleteBracket = s.replace(/[{}]/gi, ''); + const numberList = deleteBracket.split(','); + const counts = countingNumber(numberList); + const valueList = sortByValue(counts); + const answer = getKeyList(valueList); + return answer; +}; From a32b07ac1bb0781b00cdae257af9c4854ca8050c Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Thu, 31 Dec 2020 15:57:27 +0900 Subject: [PATCH 09/49] =?UTF-8?q?unsolved=20:=20programmers=20=EA=B0=80?= =?UTF-8?q?=EC=9E=A5=20=EA=B8=B4=20=ED=8C=B0=EB=A6=B0=EB=93=9C=EB=A1=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/week14.md | 68 +++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/do02reen24/Review/week14.md b/src/do02reen24/Review/week14.md index be4b0b3..195be89 100644 --- a/src/do02reen24/Review/week14.md +++ b/src/do02reen24/Review/week14.md @@ -10,3 +10,71 @@ ## :ballot_box_with_check: 프로그래머스 크레인 인형뽑기 게임(64061) ## :ballot_box_with_check: 프로그래머스 가장 긴 팰린드롬(12904) + +#### 정확성: 62.7, 효율성: 30.7 + +- 테스트 6번 12번 실패 + +```js +const isSameWord = (word, pre, next) => { + if (pre < 0 || next >= word.length) { + return false; + } + if (word[pre] !== word[next]) { + return false; + } + return true; +}; + +const oddPalindrome = (word, start) => { + let index = 1; + while (true) { + const pre = start - index; + const next = start + index; + if (isSameWord(word, pre, next)) { + index = index + 1; + continue; + } + index = index - 1; + break; + } + return index * 2 + 1; +}; + +const evenPalindrome = (word, start) => { + let index = 0; + while (true) { + const pre = start - index; + const next = start + 1 + index; + if (isSameWord(word, pre, next)) { + index = index + 1; + continue; + } + break; + } + return index * 2; +}; + +const isPalindrome = (word, start) => { + let length = oddPalindrome(word, start); + if (length === 1) { + const result = evenPalindrome(word, start); + if (result > length) { + length = result; + } + } + return length; +}; + +const solution = (s) => { + let maxLength = 0; + for (let index = 0; index < s.length; index++) { + const result = isPalindrome(s, index); + if (maxLength < result) { + maxLength = result; + } + } + + return maxLength; +}; +``` From f654f71732da23fb2df3e33add728d311886a5bb Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Thu, 31 Dec 2020 16:16:22 +0900 Subject: [PATCH 10/49] =?UTF-8?q?solve=20:=20programmers=20=EA=B0=80?= =?UTF-8?q?=EC=9E=A5=20=EA=B8=B4=20=ED=8C=B0=EB=A6=B0=EB=93=9C=EB=A1=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/week14.md | 2 + src/do02reen24/string/programmers_12904.js | 56 ++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/do02reen24/string/programmers_12904.js diff --git a/src/do02reen24/Review/week14.md b/src/do02reen24/Review/week14.md index 195be89..687a366 100644 --- a/src/do02reen24/Review/week14.md +++ b/src/do02reen24/Review/week14.md @@ -78,3 +78,5 @@ const solution = (s) => { return maxLength; }; ``` + +- 처음 코드에서는 홀수 검사 결과가 있다면 짝수 검사를 진행하지 않았었는데, 짝수 검사의 결과가 더 큰 경우도 존재함을 알게 되었다. 따라서 두 경우를 모두 계산해주고 더 큰 값을 반환해주도록 변경하였다. diff --git a/src/do02reen24/string/programmers_12904.js b/src/do02reen24/string/programmers_12904.js new file mode 100644 index 0000000..7547c24 --- /dev/null +++ b/src/do02reen24/string/programmers_12904.js @@ -0,0 +1,56 @@ +const isSameWord = (word, pre, next) => { + if (pre < 0 || next >= word.length) { + return false; + } + if (word[pre] !== word[next]) { + return false; + } + return true; +}; + +const oddPalindrome = (word, start) => { + let index = 1; + while (true) { + const pre = start - index; + const next = start + index; + if (isSameWord(word, pre, next)) { + index = index + 1; + continue; + } + index = index - 1; + break; + } + return index * 2 + 1; +}; + +const evenPalindrome = (word, start) => { + let index = 0; + while (true) { + const pre = start - index; + const next = start + 1 + index; + if (isSameWord(word, pre, next)) { + index = index + 1; + continue; + } + break; + } + return index * 2; +}; + +const isPalindrome = (word, start) => { + const oddResult = oddPalindrome(word, start); + const evenResult = evenPalindrome(word, start); + return Math.max(oddResult, evenResult); +}; + +const solution = (s) => { + let maxLength = 0; + for (let index = 0; index < s.length; index++) { + const result = isPalindrome(s, index); + if (maxLength < result) { + maxLength = result; + } + } + + return maxLength; +}; From 2dc324199156a2508f6f49054516bdb688bfb6d6 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Thu, 31 Dec 2020 16:38:48 +0900 Subject: [PATCH 11/49] =?UTF-8?q?unsolved=20:=20programmers=20=ED=81=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B8=20=EC=9D=B8=ED=98=95=EB=BD=91=EA=B8=B0=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/week14.md | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/do02reen24/Review/week14.md b/src/do02reen24/Review/week14.md index 687a366..91fb1be 100644 --- a/src/do02reen24/Review/week14.md +++ b/src/do02reen24/Review/week14.md @@ -9,6 +9,41 @@ ## :ballot_box_with_check: 프로그래머스 크레인 인형뽑기 게임(64061) +#### 정확성 81.8 + +- 테스트 1번, 2번 실패 + +```js +const getTopDollIndex = (board, index) => { + let topIndex = -1; + for (const line of board) { + topIndex = topIndex + 1; + if (line[index] !== 0) break; + } + return topIndex; +}; + +const solution = (board, moves) => { + let answer = 0; + const basket = []; + for (const move of moves) { + const dollX = move - 1; + const dollY = getTopDollIndex(board, dollX); + const doll = board[dollY][dollX]; + board[dollY][dollX] = 0; + + const top = basket.pop(); + if (top === doll) { + answer = answer + 2; + } else { + basket.push(top); + basket.push(doll); + } + } + return answer; +}; +``` + ## :ballot_box_with_check: 프로그래머스 가장 긴 팰린드롬(12904) #### 정확성: 62.7, 효율성: 30.7 From 24ae46a1f2972bcd68725f4006a70ecaea9afca3 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Thu, 31 Dec 2020 16:50:16 +0900 Subject: [PATCH 12/49] =?UTF-8?q?solve=20:=20programmers=20=ED=81=AC?= =?UTF-8?q?=EB=A0=88=EC=9D=B8=20=EC=9D=B8=ED=98=95=20=EB=BD=91=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/week14.md | 2 ++ .../simulation/programmers_64061.js | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/do02reen24/simulation/programmers_64061.js diff --git a/src/do02reen24/Review/week14.md b/src/do02reen24/Review/week14.md index 91fb1be..2c7d078 100644 --- a/src/do02reen24/Review/week14.md +++ b/src/do02reen24/Review/week14.md @@ -44,6 +44,8 @@ const solution = (board, moves) => { }; ``` +- 해당 열에 남은 인형이 없을 경우 예외처리를 해주었어야 했는데 기존의 코드는 0을 넣어주는 문제가 있음을 알게 되었다. 이에 대한 예외처리를 진행하여 해결할 수 있었다. + ## :ballot_box_with_check: 프로그래머스 가장 긴 팰린드롬(12904) #### 정확성: 62.7, 효율성: 30.7 diff --git a/src/do02reen24/simulation/programmers_64061.js b/src/do02reen24/simulation/programmers_64061.js new file mode 100644 index 0000000..cc390b6 --- /dev/null +++ b/src/do02reen24/simulation/programmers_64061.js @@ -0,0 +1,35 @@ +const getTopDollIndex = (board, index) => { + let topIndex = -1; + for (const line of board) { + topIndex = topIndex + 1; + if (line[index] !== 0) { + return topIndex; + } + } + return -1; +}; + +const solution = (board, moves) => { + let answer = 0; + const basket = []; + + for (const move of moves) { + const dollX = move - 1; + const dollY = getTopDollIndex(board, dollX); + if (dollY === -1) continue; + + const doll = board[dollY][dollX]; + board[dollY][dollX] = 0; + + const top = basket.pop(); + if (top === doll) { + answer = answer + 2; + continue; + } else if (top) { + basket.push(top); + } + basket.push(doll); + } + + return answer; +}; From 2fde9460f9ecec2db7266b64cedf03fbb893148d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Thu, 31 Dec 2020 17:36:36 +0900 Subject: [PATCH 13/49] =?UTF-8?q?solve:=20programmers=20=EA=B0=80=EC=9E=A5?= =?UTF-8?q?=20=EA=B8=B4=20=ED=8C=B0=EB=A6=B0=EB=93=9C=EB=A1=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../index.js" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "src/kyu9341/programmers_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/index.js" diff --git "a/src/kyu9341/programmers_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/index.js" "b/src/kyu9341/programmers_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/index.js" new file mode 100644 index 0000000..684466e --- /dev/null +++ "b/src/kyu9341/programmers_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/index.js" @@ -0,0 +1,35 @@ +const getLongestPalindrome = (left, right, arrFromStr) => { + let maxLength = 0; + const isInRange = (left, right) => left >= 0 && right < arrFromStr.length; + + while (isInRange(left, right)) { + if (arrFromStr[left] !== arrFromStr[right]) return maxLength; + + maxLength = right - left + 1; + left -= 1; + right += 1; + } + + return maxLength; +}; + +const solution = s => { + let maxLength = 0; + const arrFromStr = [...s]; + + const checkLength = (_, index) => { + const odd = getLongestPalindrome(index, index, arrFromStr); + const even = getLongestPalindrome(index, index + 1, arrFromStr); + maxLength = Math.max(maxLength, Math.max(odd, even)); + }; + + arrFromStr.forEach(checkLength); + + return maxLength; +}; + +(() => { + const inputs = ['abcdcba', 'abacde']; + + inputs.forEach(input => console.log(solution(input))); +})(); From a5886a0aad9f21e3e20f0af1372f5c6445b8524e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Thu, 31 Dec 2020 17:37:13 +0900 Subject: [PATCH 14/49] =?UTF-8?q?solve:=20programmers=20=ED=81=AC=EB=A0=88?= =?UTF-8?q?=EC=9D=B8=20=EC=9D=B8=ED=98=95=20=EB=BD=91=EA=B8=B0=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../index.js" | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 "src/kyu9341/programmers_\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260\352\262\214\354\236\204/index.js" diff --git "a/src/kyu9341/programmers_\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260\352\262\214\354\236\204/index.js" "b/src/kyu9341/programmers_\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260\352\262\214\354\236\204/index.js" new file mode 100644 index 0000000..0734bcd --- /dev/null +++ "b/src/kyu9341/programmers_\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260\352\262\214\354\236\204/index.js" @@ -0,0 +1,38 @@ +const range = (start, end) => + start < end ? Array.from({ length: end - start + 1 }, (_, idx) => idx + start) : []; + +const solution = (board, moves) => { + let count = 0; + const stack = []; + + const pickDoll = col => { + for (const row of range(0, board.length - 1)) { + const currentDoll = board[row][col - 1]; + board[row][col - 1] = 0; + + const isExist = currentDoll !== 0; + const isEqualToPrevDoll = stack[stack.length - 1] === currentDoll; + + if (isExist) { + if (isEqualToPrevDoll) { + stack.pop(); + count += 2; + break; + } + stack.push(currentDoll); + break; + } + } + }; + + moves.forEach(pickDoll); + return count; +} + +(() => { + const board = [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]]; + const moves = [1,5,3,5,1,2,1,4]; + + console.log(solution(board, moves)); +})(); + From 32e3d770a2873aa0aacfbb5ecad8ae713fe15b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Thu, 31 Dec 2020 17:37:39 +0900 Subject: [PATCH 15/49] =?UTF-8?q?solve:=20programmers=20=ED=8A=9C=ED=94=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../index.js" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "src/kyu9341/programmers_\355\212\234\355\224\214/index.js" diff --git "a/src/kyu9341/programmers_\355\212\234\355\224\214/index.js" "b/src/kyu9341/programmers_\355\212\234\355\224\214/index.js" new file mode 100644 index 0000000..ec57b1a --- /dev/null +++ "b/src/kyu9341/programmers_\355\212\234\355\224\214/index.js" @@ -0,0 +1,26 @@ +const parseStringToArray = str => str.substring(2, str.length - 2) + .split("},{") + .map(el => el.split(',').map(str => Number(str))); + +const solution = s => { + const set = new Set(); + const arr = parseStringToArray(s); + + const compareLength = (prev, cur) => prev.length - cur.length; + arr.sort(compareLength).flat().forEach(el => set.add(el));; + + return [...set]; +} + +(() => { + const inputs = [ + "{{2},{2,1},{2,1,3},{2,1,3,4}}", + "{{1,2,3},{2,1},{1,2,4,3},{2}}", + "{{20,111},{111}}", + "{{123}}", + "{{4,2,3},{3},{2,3,4,1},{2,3}}", + ]; + + inputs.forEach(input => console.log(solution(input))); +})(); + From 5cc8f5caf662e20aa1823870844b4fb9f197749e Mon Sep 17 00:00:00 2001 From: Do-ho Date: Thu, 31 Dec 2020 21:01:51 +0900 Subject: [PATCH 16/49] =?UTF-8?q?solve:=20programmers=20=ED=8A=9C=ED=94=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 고차함수를 많이 사용하려고 노력함 --- .../pgs_tuple.js" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "src/Do-ho/implementation/pgs_\355\212\234\355\224\214/pgs_tuple.js" diff --git "a/src/Do-ho/implementation/pgs_\355\212\234\355\224\214/pgs_tuple.js" "b/src/Do-ho/implementation/pgs_\355\212\234\355\224\214/pgs_tuple.js" new file mode 100644 index 0000000..b2f5b43 --- /dev/null +++ "b/src/Do-ho/implementation/pgs_\355\212\234\355\224\214/pgs_tuple.js" @@ -0,0 +1,25 @@ +const removeBracket = s => { + const re = /[0-9]+(,[0-9]+)*/g; + return s.match(re); +} + +const compareFunction = (prev, curr) => prev.length - curr.length; + +const parseStr = s => { + const strWithOutBracket = removeBracket(s); + const parsed = strWithOutBracket.reduce((acc, cur) => { + acc.push(cur.split(',')); + return acc; + }, []) + return parsed.sort(compareFunction); +} + +const solution = s => { + const parsedArr = parseStr(s); + const answer = parsedArr.reduce((acc, cur) => { + const filterItem = cur.filter((item) => !acc.includes(item)); + acc.push(filterItem[0]); + return acc; + }, []).map(item => parseInt(item)) + return answer; +} \ No newline at end of file From 0e3848dc872a393bf0c539be130f1532321f060d Mon Sep 17 00:00:00 2001 From: Do-ho Date: Thu, 31 Dec 2020 22:04:50 +0900 Subject: [PATCH 17/49] =?UTF-8?q?solve:=20programmers=20=EA=B0=80=EC=9E=A5?= =?UTF-8?q?=20=EA=B8=B4=20=ED=8C=B0=EB=A6=B0=EB=93=9C=EB=A1=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 한 index를 잡고 왼쪽과 오른쪽에 대한 검사를 함 - 짝수와 홀수의 경우에 다르게 처리되는 현상을 처리함 --- .../pgs_palindrome.js" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "src/Do-ho/implementation/pgs_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/pgs_palindrome.js" diff --git "a/src/Do-ho/implementation/pgs_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/pgs_palindrome.js" "b/src/Do-ho/implementation/pgs_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/pgs_palindrome.js" new file mode 100644 index 0000000..ce7affc --- /dev/null +++ "b/src/Do-ho/implementation/pgs_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/pgs_palindrome.js" @@ -0,0 +1,21 @@ +const getOddPalindromeLength = (s, idx) => { return loopPalindrome(s, idx-1, idx+1, 1); } +const getEvenPalindromeLength = (s, idx) => { + if(s[idx] != s[idx+1]) return 0; + return loopPalindrome(s, idx-1, idx+2, 2); +} + +const loopPalindrome = (s, left, right, palindromeCount) => { + while(left >= 0 && right < s.length) { + if(s[left--] !== s[right++]) break; + palindromeCount += 2 + } + return palindromeCount; +} + +const solution = s => { + let answer = 0; + for (let i=0; i Date: Thu, 31 Dec 2020 22:20:17 +0900 Subject: [PATCH 18/49] =?UTF-8?q?14=ED=9A=8C=EC=B0=A8=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/programmers/12904.js | 56 +++++++++++++++++++++ src/grap3fruit/programmers/12904.md | 72 +++++++++++++++++++++++++++ src/grap3fruit/programmers/64061.js | 37 ++++++++++++++ src/grap3fruit/programmers/64061.md | 25 ++++++++++ src/grap3fruit/programmers/64061_2.js | 40 +++++++++++++++ src/grap3fruit/programmers/64065.js | 46 +++++++++++++++++ src/grap3fruit/programmers/64065.md | 44 ++++++++++++++++ 7 files changed, 320 insertions(+) create mode 100644 src/grap3fruit/programmers/12904.js create mode 100644 src/grap3fruit/programmers/12904.md create mode 100644 src/grap3fruit/programmers/64061.js create mode 100644 src/grap3fruit/programmers/64061.md create mode 100644 src/grap3fruit/programmers/64061_2.js create mode 100644 src/grap3fruit/programmers/64065.js create mode 100644 src/grap3fruit/programmers/64065.md diff --git a/src/grap3fruit/programmers/12904.js b/src/grap3fruit/programmers/12904.js new file mode 100644 index 0000000..7d2fc3e --- /dev/null +++ b/src/grap3fruit/programmers/12904.js @@ -0,0 +1,56 @@ +const checkPD = (word, idx) => { + let max = 0; + const wordLength = word.length; + /* + 2가지가 될수 있다. + (1) baab + (2) aba + 둘다 돌고 max 구하자! + */ + + // 얘는 (2) aba + max = 1; + for (let i = 1; i < wordLength / 2; i++) { + if (word[idx - i] !== word[idx + i]) { + break; + } + max = i * 2 + 1; + } + + // 얘는 (1) baab + if (idx < word.length - 1 && word[idx] === word[idx + 1]) { + let maxCheck2 = 2; + if (maxCheck2 > max) { + max = maxCheck2; + } + + for (let i = 1; i < wordLength / 2; i++) { + if (word[idx - i] !== word[idx + i + 1]) { + break; + } + + maxCheck2 = i * 2 + 2; + if (maxCheck2 > max) { + max = maxCheck2; + } + } + } + return max; +}; + +const solution = (s) => { + let sArr = s.split(''); + let answer = 0; + + for (let i = 0; i < sArr.length; i++) { + let result = checkPD(sArr, i); + if (result > answer) { + answer = result; + } + } + + return answer; +}; + +// solution('ccabcbaa'); +console.log(solution('baaba')); diff --git a/src/grap3fruit/programmers/12904.md b/src/grap3fruit/programmers/12904.md new file mode 100644 index 0000000..3638877 --- /dev/null +++ b/src/grap3fruit/programmers/12904.md @@ -0,0 +1,72 @@ +# 12904 가장 긴 팰린드롬 - 성공 + +## 아이디어 구현 + +첫번째 풀이 + +``` +const checkPD = (word) => { + const wordLength = word.length; + + for (let i = 0; i < wordLength / 2; i++) { + if (word[i] !== word[wordLength - i - 1]) { + return false; + } + } + return true; +}; + +const solution = (s) => { + sArr = s.split(''); + answer = 0; + + sArr.reduce((accumulator, currentValue, currentIndex, array) => { + console.log(accumulator); + console.log(accumulator.join('')); + if (accumulator.length > 0 && checkPD(accumulator.join(''))) { + console.log(`${currentIndex}에서 펠린드롬입니다`); + answer = currentIndex; + } + + return [...accumulator, currentValue]; + }, []); + console.log(sArr); + + if (checkPD(sArr.join(''))) { + // console.log(`${sArr.length}에서 펠린드롬입니다`); + answer = sArr.length; + } + + console.log(answer); + return answer; +}; + +solution('abcabcdcbae'); +``` + +reduce써서 멋지게 풀어보려고 했지만, + +팰린드롬이 중간에 오는 경우 못찾는다. 항상 앞에서 붙여나가기 때문 ㅠ + +테케 `abcabcdcbae` 여기에 걸림 +`adcbbbbca` 이것도 안될듯. + +--- + +한개짜리일때 쫙 찾고, + +두개짜리일때 쫙 찾고 + +해야겠는걸. + +근데 이러면 효율성 통과 안될거같은데. + +위에 느낌으로 하려면, 큰거부터 찾자. 작은건 무조건 큰거까지 가야하지만 큰거는 되면 바로 끝내면 된다. + +--- + +위에꺼는 아닌것 같아 고민하다가 떠오름. + +하나씩 가면서 넓혀보기. 최대한 넓힌 max 리턴. << 이 방법. + +아이디어 싸움이었다. 못떠올렸으면 으으.. diff --git a/src/grap3fruit/programmers/64061.js b/src/grap3fruit/programmers/64061.js new file mode 100644 index 0000000..ab3b67f --- /dev/null +++ b/src/grap3fruit/programmers/64061.js @@ -0,0 +1,37 @@ +const board = [ + [0, 0, 0, 0, 0], + [0, 0, 1, 0, 3], + [0, 2, 5, 0, 1], + [4, 2, 4, 4, 2], + [3, 5, 1, 3, 1], +]; +const moves = [1, 5, 3, 5, 1, 2, 1, 4]; + +const result = []; +let answer = 0; + +moves.forEach((move) => { + for (let i = 0; i < board.length; i++) { + if (board[i][move - 1] !== 0) { + if (result.length > 0) { + const prev = result.pop(); + + if (prev === board[i][move - 1]) { + board[i][move - 1] = 0; + answer += 2; + break; + } + + result.push(prev); + } + + result.push(board[i][move - 1]); + board[i][move - 1] = 0; + break; + } + } +}); + +console.log(board); +console.log(result); +console.log(answer); diff --git a/src/grap3fruit/programmers/64061.md b/src/grap3fruit/programmers/64061.md new file mode 100644 index 0000000..9229de2 --- /dev/null +++ b/src/grap3fruit/programmers/64061.md @@ -0,0 +1,25 @@ +# 64061 크레인 인형뽑기 게임 - 성공 + +## 구현 + +moves는 board의 x축에 접근하는데, + +이걸 이제 result stack에 넣고, + +stack에 넣을때 pop을 한번 해줘서 + +pop된 요소가 현재 넣는것과 동일하면 pass 하고 answer에 +2 해줌. + +동일 하지 않으면 pop 했던거 다시 넣고, 현재 요소 넣어줌. + +--- + +move.forEach는 reduce로 accumulator에 answer 넣어서 가능할것 같고. + +borad[i][move] 이거는 고차함수로 될까? + +외부에 flag 선언해놓고, 한번 0으로 바뀌면 flag 값 바꿔주면 될거같긴한데. 의미가 있나? for문이 더 빠를거같은데. + +속도 vs 가독성? + +> 구현해 보니 가독성이 좋은것 같지도 않다.. diff --git a/src/grap3fruit/programmers/64061_2.js b/src/grap3fruit/programmers/64061_2.js new file mode 100644 index 0000000..1ac2e7f --- /dev/null +++ b/src/grap3fruit/programmers/64061_2.js @@ -0,0 +1,40 @@ +const board = [ + [0, 0, 0, 0, 0], + [0, 0, 1, 0, 3], + [0, 2, 5, 0, 1], + [4, 2, 4, 4, 2], + [3, 5, 1, 3, 1], +]; +const moves = [1, 5, 3, 5, 1, 2, 1, 4]; + +const result = []; +let answer = 0; + +moves.forEach((move) => { + let changedFlag = false; + + board.forEach((el) => { + if (el[move - 1] !== 0 && changedFlag === false) { + if (result.length > 0) { + const prev = result.pop(); + + if (prev === el[move - 1]) { + el[move - 1] = 0; + answer += 2; + changedFlag = true; + } else { + result.push(prev); + } + } + if (changedFlag === false) { + result.push(el[move - 1]); + el[move - 1] = 0; + changedFlag = true; + } + } + }); +}); + +console.log(board); +console.log(result); +console.log(answer); diff --git a/src/grap3fruit/programmers/64065.js b/src/grap3fruit/programmers/64065.js new file mode 100644 index 0000000..d6902cc --- /dev/null +++ b/src/grap3fruit/programmers/64065.js @@ -0,0 +1,46 @@ +const getDividedArr = (arrA, arrB) => { + return arrB.filter((el) => !arrA.includes(el)); +}; + +function solution(s) { + let answer = []; + + const arrS = s.split(''); + + let mother_arr = []; + let child_arr = []; + + for (let i = 1; i < arrS.length - 1; i++) { + if (arrS[i] === '}') { + mother_arr.push(child_arr); + child_arr = []; + } + + if (+arrS[i] >= 0) { + if (+arrS[i - 1] >= 0) { + const num = child_arr.pop(); + child_arr.push(Number(num + arrS[i])); + } else { + child_arr.push(+arrS[i]); + } + } + } + console.log(mother_arr); // 여기 까지 {} 문자열을 [] 배열로 바꿈. + + for (let i = 0; i < mother_arr.length; i++) { + for (let j = 0; j < mother_arr.length; j++) { + if (mother_arr[j].length === i + 1) { + const [temp] = getDividedArr(answer, mother_arr[j]); + answer.push(temp); + } + } + } + + return answer; +} + +console.log(solution('{{2},{2,1},{2,1,3},{2,1,3,4}}')); +console.log(solution('{{1,2,3},{2,1},{1,2,4,3},{2}}')); +console.log(solution('{{20,111},{111}}')); +console.log(solution('{{123}}')); +console.log(solution('{{4,2,3},{3},{2,3,4,1},{2,3}}')); diff --git a/src/grap3fruit/programmers/64065.md b/src/grap3fruit/programmers/64065.md new file mode 100644 index 0000000..f4cf3d6 --- /dev/null +++ b/src/grap3fruit/programmers/64065.md @@ -0,0 +1,44 @@ +# 64065 2019 카카오 겨울인턴 튜플 - 성공 + +## 구현 + +집합 길이에 따라서 + +가장 작은게 맨 앞이고 + +그 다음 길이에 추가된게 다음꺼 + +이런식으로 result 채우면 됨. + +python에 set 쓰면 엄청 쉬웠을듯 ㅋㅋ + +--- + +1. {} 문자열을 [] 배열로 바꾼다. + +``` +부모 arr, 자식 arr를 둔다. +이차원 배열의 바깥을 부모 arr. +내부 el들이 자식 arr. + +전체 string 길이만큼 loop를 돌면서 + 만약 '}' 면 + 부모에 현재까지 자식 arr 추가. + 자식 arr = [] + + '}' 가 아닐떄 + 앞이 숫자면 합쳐서 자식arr에 넣고 + 아니면 그냥 넣음. + + +``` + +2. 배열 갯수만큼 이중포문 돈다. + +``` +for i = 1,2,3 ... + for j = 1,2,3 ... + 만약 현재 배열의 길이가 i이면, + answer에 추가. + +``` From 17aa5bfc404b12481062b276af0af5ce315140f4 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Fri, 1 Jan 2021 13:15:06 +0900 Subject: [PATCH 19/49] [refactor] week14 code --- src/grap3fruit/programmers/12904.js | 37 +++++------------- src/grap3fruit/programmers/64061.js | 39 +++++++++++-------- src/grap3fruit/programmers/64065.js | 60 ++++++++++++++++++----------- 3 files changed, 69 insertions(+), 67 deletions(-) diff --git a/src/grap3fruit/programmers/12904.js b/src/grap3fruit/programmers/12904.js index 7d2fc3e..ef69dc0 100644 --- a/src/grap3fruit/programmers/12904.js +++ b/src/grap3fruit/programmers/12904.js @@ -1,38 +1,22 @@ -const checkPD = (word, idx) => { +const getMaxOddPalindrome = (word, idx) => { let max = 0; - const wordLength = word.length; - /* - 2가지가 될수 있다. - (1) baab - (2) aba - 둘다 돌고 max 구하자! - */ - - // 얘는 (2) aba - max = 1; - for (let i = 1; i < wordLength / 2; i++) { + for (let i = 0; i < word.length / 2; i++) { if (word[idx - i] !== word[idx + i]) { break; } max = i * 2 + 1; } + return max; +}; - // 얘는 (1) baab +const getMaxEvenPalindrome = (word, idx) => { + let max = 0; if (idx < word.length - 1 && word[idx] === word[idx + 1]) { - let maxCheck2 = 2; - if (maxCheck2 > max) { - max = maxCheck2; - } - - for (let i = 1; i < wordLength / 2; i++) { + for (let i = 0; i < word.length / 2; i++) { if (word[idx - i] !== word[idx + i + 1]) { break; } - - maxCheck2 = i * 2 + 2; - if (maxCheck2 > max) { - max = maxCheck2; - } + max = i * 2 + 2; } } return max; @@ -43,10 +27,7 @@ const solution = (s) => { let answer = 0; for (let i = 0; i < sArr.length; i++) { - let result = checkPD(sArr, i); - if (result > answer) { - answer = result; - } + answer = Math.max(answer, getMaxOddPalindrome(sArr, i), getMaxEvenPalindrome(sArr, i)); } return answer; diff --git a/src/grap3fruit/programmers/64061.js b/src/grap3fruit/programmers/64061.js index ab3b67f..246ddd8 100644 --- a/src/grap3fruit/programmers/64061.js +++ b/src/grap3fruit/programmers/64061.js @@ -7,31 +7,38 @@ const board = [ ]; const moves = [1, 5, 3, 5, 1, 2, 1, 4]; -const result = []; -let answer = 0; +function solution(board, moves) { + const result = []; + let answer = 0; -moves.forEach((move) => { - for (let i = 0; i < board.length; i++) { - if (board[i][move - 1] !== 0) { - if (result.length > 0) { - const prev = result.pop(); + moves.reduce((acc, move) => { + for (let i = 0; i < board.length; i++) { + if (board[i][move - 1] === 0) { + continue; + } + + if (acc.length > 0) { + const prev = acc.pop(); if (prev === board[i][move - 1]) { board[i][move - 1] = 0; answer += 2; - break; + return acc; } - result.push(prev); + acc.push(prev); } - result.push(board[i][move - 1]); + acc.push(board[i][move - 1]); board[i][move - 1] = 0; - break; + return acc; } - } -}); + return acc; + }, []); + + console.log(board); + console.log(result); + return answer; +} -console.log(board); -console.log(result); -console.log(answer); +console.log(solution(board, moves)); diff --git a/src/grap3fruit/programmers/64065.js b/src/grap3fruit/programmers/64065.js index d6902cc..0ecd3d3 100644 --- a/src/grap3fruit/programmers/64065.js +++ b/src/grap3fruit/programmers/64065.js @@ -1,37 +1,41 @@ -const getDividedArr = (arrA, arrB) => { +const getSubtractedArr = (arrA, arrB) => { return arrB.filter((el) => !arrA.includes(el)); }; -function solution(s) { - let answer = []; +const getArrFromStr = (s) => { + const arr = s.split(''); - const arrS = s.split(''); - - let mother_arr = []; + let parent_arr = []; let child_arr = []; - for (let i = 1; i < arrS.length - 1; i++) { - if (arrS[i] === '}') { - mother_arr.push(child_arr); + for (let i = 1; i < arr.length - 1; i++) { + if (arr[i] === '}') { + parent_arr.push(child_arr); child_arr = []; } - if (+arrS[i] >= 0) { - if (+arrS[i - 1] >= 0) { + if (+arr[i] >= 0) { + if (+arr[i - 1] >= 0) { const num = child_arr.pop(); - child_arr.push(Number(num + arrS[i])); + child_arr.push(Number(num + arr[i])); } else { - child_arr.push(+arrS[i]); + child_arr.push(+arr[i]); } } } - console.log(mother_arr); // 여기 까지 {} 문자열을 [] 배열로 바꿈. + return parent_arr; +}; + +function solution(s) { + let answer = []; + const arr = getArrFromStr(s); - for (let i = 0; i < mother_arr.length; i++) { - for (let j = 0; j < mother_arr.length; j++) { - if (mother_arr[j].length === i + 1) { - const [temp] = getDividedArr(answer, mother_arr[j]); + for (let i = 0; i < arr.length; i++) { + for (let j = 0; j < arr.length; j++) { + if (arr[j].length === i + 1) { + const [temp] = getSubtractedArr(answer, arr[j]); answer.push(temp); + break; } } } @@ -39,8 +43,18 @@ function solution(s) { return answer; } -console.log(solution('{{2},{2,1},{2,1,3},{2,1,3,4}}')); -console.log(solution('{{1,2,3},{2,1},{1,2,4,3},{2}}')); -console.log(solution('{{20,111},{111}}')); -console.log(solution('{{123}}')); -console.log(solution('{{4,2,3},{3},{2,3,4,1},{2,3}}')); +// console.log(solution('{{2},{2,1},{2,1,3},{2,1,3,4}}')); +// console.log(solution('{{1,2,3},{2,1},{1,2,4,3},{2}}')); +// console.log(solution('{{20,111},{111}}')); +// console.log(solution('{{123}}')); +// console.log(solution('{{4,2,3},{3},{2,3,4,1},{2,3}}')); + +const setA = new Set(); +const setB = new Set(); +setA.add(1); +setA.add(2); +setB.add(3); +setB.add(2); + +console.log(setA, setB); +console.log(setA - setB); From 1e15d26a82e095be6dba3e05dcfdc2d188a921da Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Fri, 1 Jan 2021 13:16:18 +0900 Subject: [PATCH 20/49] [refactor] week14 code --- src/grap3fruit/programmers/64065.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/grap3fruit/programmers/64065.js b/src/grap3fruit/programmers/64065.js index 0ecd3d3..e22cf06 100644 --- a/src/grap3fruit/programmers/64065.js +++ b/src/grap3fruit/programmers/64065.js @@ -1,6 +1,4 @@ -const getSubtractedArr = (arrA, arrB) => { - return arrB.filter((el) => !arrA.includes(el)); -}; +const getSubtractedArr = (arrA, arrB) => arrB.filter((el) => !arrA.includes(el)); const getArrFromStr = (s) => { const arr = s.split(''); From 8e6e635c772c820e12cc3c797d49882e290bd712 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Sat, 2 Jan 2021 14:44:01 +0900 Subject: [PATCH 21/49] =?UTF-8?q?[refactor]=20programmers=20=EB=82=B4?= =?UTF-8?q?=EB=B6=80=20js/py=20=ED=8F=B4=EB=8D=94=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/programmers/{ => js}/12904.js | 0 src/grap3fruit/programmers/{ => js}/12904.md | 0 src/grap3fruit/programmers/{ => js}/64061.js | 0 src/grap3fruit/programmers/{ => js}/64061.md | 0 src/grap3fruit/programmers/{ => js}/64061_2.js | 0 src/grap3fruit/programmers/{ => js}/64065.js | 0 src/grap3fruit/programmers/{ => js}/64065.md | 0 src/grap3fruit/programmers/{ => py}/17685.py | 0 src/grap3fruit/programmers/{ => py}/42578.py | 0 src/grap3fruit/programmers/{ => py}/60057.py | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename src/grap3fruit/programmers/{ => js}/12904.js (100%) rename src/grap3fruit/programmers/{ => js}/12904.md (100%) rename src/grap3fruit/programmers/{ => js}/64061.js (100%) rename src/grap3fruit/programmers/{ => js}/64061.md (100%) rename src/grap3fruit/programmers/{ => js}/64061_2.js (100%) rename src/grap3fruit/programmers/{ => js}/64065.js (100%) rename src/grap3fruit/programmers/{ => js}/64065.md (100%) rename src/grap3fruit/programmers/{ => py}/17685.py (100%) rename src/grap3fruit/programmers/{ => py}/42578.py (100%) rename src/grap3fruit/programmers/{ => py}/60057.py (100%) diff --git a/src/grap3fruit/programmers/12904.js b/src/grap3fruit/programmers/js/12904.js similarity index 100% rename from src/grap3fruit/programmers/12904.js rename to src/grap3fruit/programmers/js/12904.js diff --git a/src/grap3fruit/programmers/12904.md b/src/grap3fruit/programmers/js/12904.md similarity index 100% rename from src/grap3fruit/programmers/12904.md rename to src/grap3fruit/programmers/js/12904.md diff --git a/src/grap3fruit/programmers/64061.js b/src/grap3fruit/programmers/js/64061.js similarity index 100% rename from src/grap3fruit/programmers/64061.js rename to src/grap3fruit/programmers/js/64061.js diff --git a/src/grap3fruit/programmers/64061.md b/src/grap3fruit/programmers/js/64061.md similarity index 100% rename from src/grap3fruit/programmers/64061.md rename to src/grap3fruit/programmers/js/64061.md diff --git a/src/grap3fruit/programmers/64061_2.js b/src/grap3fruit/programmers/js/64061_2.js similarity index 100% rename from src/grap3fruit/programmers/64061_2.js rename to src/grap3fruit/programmers/js/64061_2.js diff --git a/src/grap3fruit/programmers/64065.js b/src/grap3fruit/programmers/js/64065.js similarity index 100% rename from src/grap3fruit/programmers/64065.js rename to src/grap3fruit/programmers/js/64065.js diff --git a/src/grap3fruit/programmers/64065.md b/src/grap3fruit/programmers/js/64065.md similarity index 100% rename from src/grap3fruit/programmers/64065.md rename to src/grap3fruit/programmers/js/64065.md diff --git a/src/grap3fruit/programmers/17685.py b/src/grap3fruit/programmers/py/17685.py similarity index 100% rename from src/grap3fruit/programmers/17685.py rename to src/grap3fruit/programmers/py/17685.py diff --git a/src/grap3fruit/programmers/42578.py b/src/grap3fruit/programmers/py/42578.py similarity index 100% rename from src/grap3fruit/programmers/42578.py rename to src/grap3fruit/programmers/py/42578.py diff --git a/src/grap3fruit/programmers/60057.py b/src/grap3fruit/programmers/py/60057.py similarity index 100% rename from src/grap3fruit/programmers/60057.py rename to src/grap3fruit/programmers/py/60057.py From ba208959c69bc44993392013ffa9069cf1cca641 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Sat, 2 Jan 2021 14:44:46 +0900 Subject: [PATCH 22/49] =?UTF-8?q?=EA=B5=AC=EB=A6=84=20=EC=BD=94=ED=85=8C?= =?UTF-8?q?=20=EC=97=B0=EC=8A=B5=20&=20nodejs=20input=20=EC=BC=80=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/goorm/43089.js | 27 ++++++++++++++ src/grap3fruit/goorm/43125.js | 29 +++++++++++++++ src/grap3fruit/goorm/88520.js | 64 ++++++++++++++++++++++++++++++++ src/grap3fruit/goorm/input.js | 33 ++++++++++++++++ src/grap3fruit/goorm/input1_2.js | 37 ++++++++++++++++++ src/grap3fruit/goorm/input2.js | 33 ++++++++++++++++ 6 files changed, 223 insertions(+) create mode 100644 src/grap3fruit/goorm/43089.js create mode 100644 src/grap3fruit/goorm/43125.js create mode 100644 src/grap3fruit/goorm/88520.js create mode 100644 src/grap3fruit/goorm/input.js create mode 100644 src/grap3fruit/goorm/input1_2.js create mode 100644 src/grap3fruit/goorm/input2.js diff --git a/src/grap3fruit/goorm/43089.js b/src/grap3fruit/goorm/43089.js new file mode 100644 index 0000000..26169ca --- /dev/null +++ b/src/grap3fruit/goorm/43089.js @@ -0,0 +1,27 @@ +// Run by Node.js +const getResultLength = (data) => { + dataArr = data[0].split(''); + // console.log(dataArr) + const result = dataArr.filter((el) => el === data[1]); + return result.length; +}; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let count = 0; +let n = 2; +data = []; +rl.on('line', function (line) { + data.push(line); + count += 1; + if (count === n) { + rl.close(); + } +}).on('close', function () { + console.log(getResultLength(data)); + process.exit(); +}); diff --git a/src/grap3fruit/goorm/43125.js b/src/grap3fruit/goorm/43125.js new file mode 100644 index 0000000..9087227 --- /dev/null +++ b/src/grap3fruit/goorm/43125.js @@ -0,0 +1,29 @@ +// Run by Node.js + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let N = 0; +// const data = []; +let count = 0; + +rl.on('line', function (line) { + if (!N) { + N = +line; + } else { + const data = line.split(' ').map((el) => +el); + let min = data[0]; + for (let i = 1; i < data.length; i++) { + if (data[i] < min) { + min = data[i]; + } + } + console.log(min); + rl.close(); + } +}).on('close', function () { + process.exit(); +}); diff --git a/src/grap3fruit/goorm/88520.js b/src/grap3fruit/goorm/88520.js new file mode 100644 index 0000000..cb71b2c --- /dev/null +++ b/src/grap3fruit/goorm/88520.js @@ -0,0 +1,64 @@ +const print = (data) => { + console.log(data); +}; + +const getTrashCount = (data, A, B, K) => { + let count = 0; + for (let i = A; i < A + K; i++) { + for (let j = B; j < B + K; j++) { + if (data[i][j] === 1) { + count += 1; + } + } + } + return count; +}; + +const solution = (data, info) => { + const [N, K] = info; + let min_result = K * K; + for (let i = 0; i < N - K + 1; i++) { + for (let j = 0; j < N - K + 1; j++) { + min_result = Math.min(min_result, getTrashCount(data, i, j, K)); + } + } + console.log(min_result); +}; + +const readline = require('readline'); + +(async () => { + let rl = readline.createInterface({ input: process.stdin }); + + let T = null; + let info = null; // N, K + let data = []; + let count_T = 0; + let count_N = 0; + for await (const line of rl) { + if (!T) { + T = +line; + } else if (T && !info) { + info = line.split(' ').map((el) => +el); + } else { + data.push(line.split(' ').map((el) => +el)); + count_N += 1; + } + if (T && info) { + if (info[0] === count_N) { + // 로직 수행 & 초기화 + print(data); + solution(data, info); + + info = null; // N, K + data = []; + count_T = 0; + count_N = 0; + } + } + } + + // rl.close(); + + process.exit(); +})(); diff --git a/src/grap3fruit/goorm/input.js b/src/grap3fruit/goorm/input.js new file mode 100644 index 0000000..dc5cb8e --- /dev/null +++ b/src/grap3fruit/goorm/input.js @@ -0,0 +1,33 @@ +const print = (N, data) => { + console.log(N); + console.log(data); +}; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let N = null; +let count = 0; +const data = []; + +rl.on('line', function (line) { + console.log(line); + if (!N) { + N = +line; + } else { + // data.push(line.split(' ').map((el) => +el)); + // data.push(line.split('').map((el) => +el)); + // data.push(line.split('').map((el) => el)); + data.push(line); + } + count += 1; + if (count === N) { + rl.close(); + } +}).on('close', function () { + print(N, data); + process.exit(); +}); diff --git a/src/grap3fruit/goorm/input1_2.js b/src/grap3fruit/goorm/input1_2.js new file mode 100644 index 0000000..9577ac4 --- /dev/null +++ b/src/grap3fruit/goorm/input1_2.js @@ -0,0 +1,37 @@ +const print = (N, info, data) => { + console.log(N); + console.log(info); + console.log(data); +}; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let N = null; +let info = null; +let count = 0; +const data = []; + +rl.on('line', function (line) { + console.log(line); + if (!N) { + N = +line; + } else if (N && !info) { + info = line.split(' ').map((el) => +el); + } else { + data.push(line.split(' ').map((el) => +el)); + // data.push(line.split('').map((el) => +el)); + // data.push(line.split('').map((el) => el)); + // data.push(line); + count += 1; + } + if (count === N) { + rl.close(); + } +}).on('close', function () { + print(N, info, data); + process.exit(); +}); diff --git a/src/grap3fruit/goorm/input2.js b/src/grap3fruit/goorm/input2.js new file mode 100644 index 0000000..e3b2161 --- /dev/null +++ b/src/grap3fruit/goorm/input2.js @@ -0,0 +1,33 @@ +const print = (N, data) => { + console.log(N); + console.log(data); +}; + +const readline = require('readline'); + +(async () => { + let rl = readline.createInterface({ input: process.stdin }); + let N = null; + let count = 0; + const data = []; + + for await (const line of rl) { + if (!N) { + N = +line; + } else { + data.push(line.split('').map((el) => +el)); + // data.push(line); + count += 1; + } + if (N === count) { + rl.close(); + } + } + + data.forEach((el) => { + console.log('len: ', el.length); + }); + + print(N, data); + process.exit(); +})(); From 1504ae4ac371761f40c5b4b5975efeb6d56512e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=EC=98=81=EC=96=B8?= Date: Sat, 2 Jan 2021 18:04:20 +0900 Subject: [PATCH 23/49] =?UTF-8?q?docs:=2015=EC=A3=BC=EC=B0=A8=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42a67d8..ff99bcb 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ | 12주차 | [ATM](https://www.acmicpc.net/problem/11399) | [회문](https://www.acmicpc.net/problem/17609) | | | | 13주차 | [미로탐색](https://www.acmicpc.net/problem/2178) | [암호코드](https://www.acmicpc.net/problem/2011) | [떡먹는호랑이](https://www.acmicpc.net/problem/2502) | [촌수계산](https://www.acmicpc.net/problem/2644) | | 14주차 | [크레인 인형뽑기](https://programmers.co.kr/learn/courses/30/lessons/64061) | [가장 긴 팰린드롬](https://programmers.co.kr/learn/courses/30/lessons/12904) | [튜플](https://programmers.co.kr/learn/courses/30/lessons/64065) | | - +| 15주차 | [위장](https://programmers.co.kr/learn/courses/30/lessons/42578) | [네트워크](https://programmers.co.kr/learn/courses/30/lessons/43162) | [영어 끝말잇기](https://programmers.co.kr/learn/courses/30/lessons/12981) | | ## :blue_book: Additional Study | 분류 | | | | From 94933b3da438a40e4c4ef5227f1621736f15a757 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Sun, 3 Jan 2021 22:25:38 +0900 Subject: [PATCH 24/49] =?UTF-8?q?[refactor]=20py,js=20=ED=8F=B4=EB=8D=94?= =?UTF-8?q?=EB=A1=9C=20=EB=82=98=EB=88=84=EA=B3=A0=20=ED=95=98=EC=9C=84?= =?UTF-8?q?=EC=97=90=20=EC=BD=94=ED=85=8C=20=EC=82=AC=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EB=91=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/goorm/43089.js | 27 ------- src/grap3fruit/goorm/43125.js | 29 ------- src/grap3fruit/goorm/88520.js | 64 --------------- .../{goorm/input.js => js/goorm/input1.js} | 0 src/grap3fruit/js/goorm/input1.md | 0 src/grap3fruit/{ => js}/goorm/input1_2.js | 4 +- src/grap3fruit/{ => js}/goorm/input2.js | 14 ++-- src/grap3fruit/js/goorm/input2.md | 61 +++++++++++++++ .../js => js/programmers}/12904.js | 0 .../js => js/programmers}/12904.md | 0 .../js => js/programmers}/64061.js | 0 .../js => js/programmers}/64061.md | 0 .../js => js/programmers}/64061_2.js | 0 .../js => js/programmers}/64065.js | 0 .../js => js/programmers}/64065.md | 0 src/grap3fruit/{ => py}/boj/1010.md | 0 src/grap3fruit/{ => py}/boj/1010.py | 0 src/grap3fruit/{ => py}/boj/1094.md | 0 src/grap3fruit/{ => py}/boj/1094.py | 0 src/grap3fruit/{ => py}/boj/11047.md | 0 src/grap3fruit/{ => py}/boj/11047.py | 0 src/grap3fruit/{ => py}/boj/11286.py | 78 +++++++++---------- src/grap3fruit/{ => py}/boj/11399.md | 0 src/grap3fruit/{ => py}/boj/11399.py | 0 src/grap3fruit/{ => py}/boj/1149.md | 0 src/grap3fruit/{ => py}/boj/1149.py | 0 src/grap3fruit/{ => py}/boj/11497.md | 0 src/grap3fruit/{ => py}/boj/11497.py | 0 src/grap3fruit/{ => py}/boj/11727.md | 0 src/grap3fruit/{ => py}/boj/11727.py | 0 src/grap3fruit/{ => py}/boj/1254.md | 0 src/grap3fruit/{ => py}/boj/1254.py | 0 src/grap3fruit/{ => py}/boj/12731.md | 0 src/grap3fruit/{ => py}/boj/12731.py | 0 src/grap3fruit/{ => py}/boj/1316.py | 0 src/grap3fruit/{ => py}/boj/14889.md | 0 src/grap3fruit/{ => py}/boj/14889.py | 0 src/grap3fruit/{ => py}/boj/1697.md | 0 src/grap3fruit/{ => py}/boj/1697.py | 0 src/grap3fruit/{ => py}/boj/17609.md | 0 src/grap3fruit/{ => py}/boj/17609.py | 0 src/grap3fruit/{ => py}/boj/18233.md | 0 src/grap3fruit/{ => py}/boj/18233.py | 0 src/grap3fruit/{ => py}/boj/19238.py | 0 src/grap3fruit/{ => py}/boj/1932.md | 0 src/grap3fruit/{ => py}/boj/1932.py | 0 src/grap3fruit/{ => py}/boj/1946.md | 0 src/grap3fruit/{ => py}/boj/1946.py | 0 src/grap3fruit/{ => py}/boj/1991.py | 0 src/grap3fruit/{ => py}/boj/2011.md | 0 src/grap3fruit/{ => py}/boj/2011.py | 0 src/grap3fruit/{ => py}/boj/2178.md | 0 src/grap3fruit/{ => py}/boj/2178.py | 0 src/grap3fruit/{ => py}/boj/2502.md | 0 src/grap3fruit/{ => py}/boj/2502.py | 0 src/grap3fruit/{ => py}/boj/2579.md | 0 src/grap3fruit/{ => py}/boj/2579.py | 0 src/grap3fruit/{ => py}/boj/2606.md | 0 src/grap3fruit/{ => py}/boj/2606.py | 0 src/grap3fruit/{ => py}/boj/2644.md | 0 src/grap3fruit/{ => py}/boj/2644.py | 0 src/grap3fruit/{ => py}/boj/2957.py | 0 src/grap3fruit/{ => py}/boj/7569.md | 0 src/grap3fruit/{ => py}/boj/7569.py | 0 src/grap3fruit/{ => py}/boj/9095.md | 0 src/grap3fruit/{ => py}/boj/9095.py | 0 src/grap3fruit/{ => py}/input_test.py | 0 .../py => py/programmers}/17685.py | 0 .../py => py/programmers}/42578.py | 0 .../py => py/programmers}/60057.py | 0 70 files changed, 108 insertions(+), 169 deletions(-) delete mode 100644 src/grap3fruit/goorm/43089.js delete mode 100644 src/grap3fruit/goorm/43125.js delete mode 100644 src/grap3fruit/goorm/88520.js rename src/grap3fruit/{goorm/input.js => js/goorm/input1.js} (100%) create mode 100644 src/grap3fruit/js/goorm/input1.md rename src/grap3fruit/{ => js}/goorm/input1_2.js (91%) rename src/grap3fruit/{ => js}/goorm/input2.js (52%) create mode 100644 src/grap3fruit/js/goorm/input2.md rename src/grap3fruit/{programmers/js => js/programmers}/12904.js (100%) rename src/grap3fruit/{programmers/js => js/programmers}/12904.md (100%) rename src/grap3fruit/{programmers/js => js/programmers}/64061.js (100%) rename src/grap3fruit/{programmers/js => js/programmers}/64061.md (100%) rename src/grap3fruit/{programmers/js => js/programmers}/64061_2.js (100%) rename src/grap3fruit/{programmers/js => js/programmers}/64065.js (100%) rename src/grap3fruit/{programmers/js => js/programmers}/64065.md (100%) rename src/grap3fruit/{ => py}/boj/1010.md (100%) rename src/grap3fruit/{ => py}/boj/1010.py (100%) rename src/grap3fruit/{ => py}/boj/1094.md (100%) rename src/grap3fruit/{ => py}/boj/1094.py (100%) rename src/grap3fruit/{ => py}/boj/11047.md (100%) rename src/grap3fruit/{ => py}/boj/11047.py (100%) rename src/grap3fruit/{ => py}/boj/11286.py (92%) rename src/grap3fruit/{ => py}/boj/11399.md (100%) rename src/grap3fruit/{ => py}/boj/11399.py (100%) rename src/grap3fruit/{ => py}/boj/1149.md (100%) rename src/grap3fruit/{ => py}/boj/1149.py (100%) rename src/grap3fruit/{ => py}/boj/11497.md (100%) rename src/grap3fruit/{ => py}/boj/11497.py (100%) rename src/grap3fruit/{ => py}/boj/11727.md (100%) rename src/grap3fruit/{ => py}/boj/11727.py (100%) rename src/grap3fruit/{ => py}/boj/1254.md (100%) rename src/grap3fruit/{ => py}/boj/1254.py (100%) rename src/grap3fruit/{ => py}/boj/12731.md (100%) rename src/grap3fruit/{ => py}/boj/12731.py (100%) rename src/grap3fruit/{ => py}/boj/1316.py (100%) rename src/grap3fruit/{ => py}/boj/14889.md (100%) rename src/grap3fruit/{ => py}/boj/14889.py (100%) rename src/grap3fruit/{ => py}/boj/1697.md (100%) rename src/grap3fruit/{ => py}/boj/1697.py (100%) rename src/grap3fruit/{ => py}/boj/17609.md (100%) rename src/grap3fruit/{ => py}/boj/17609.py (100%) rename src/grap3fruit/{ => py}/boj/18233.md (100%) rename src/grap3fruit/{ => py}/boj/18233.py (100%) rename src/grap3fruit/{ => py}/boj/19238.py (100%) rename src/grap3fruit/{ => py}/boj/1932.md (100%) rename src/grap3fruit/{ => py}/boj/1932.py (100%) rename src/grap3fruit/{ => py}/boj/1946.md (100%) rename src/grap3fruit/{ => py}/boj/1946.py (100%) rename src/grap3fruit/{ => py}/boj/1991.py (100%) rename src/grap3fruit/{ => py}/boj/2011.md (100%) rename src/grap3fruit/{ => py}/boj/2011.py (100%) rename src/grap3fruit/{ => py}/boj/2178.md (100%) rename src/grap3fruit/{ => py}/boj/2178.py (100%) rename src/grap3fruit/{ => py}/boj/2502.md (100%) rename src/grap3fruit/{ => py}/boj/2502.py (100%) rename src/grap3fruit/{ => py}/boj/2579.md (100%) rename src/grap3fruit/{ => py}/boj/2579.py (100%) rename src/grap3fruit/{ => py}/boj/2606.md (100%) rename src/grap3fruit/{ => py}/boj/2606.py (100%) rename src/grap3fruit/{ => py}/boj/2644.md (100%) rename src/grap3fruit/{ => py}/boj/2644.py (100%) rename src/grap3fruit/{ => py}/boj/2957.py (100%) rename src/grap3fruit/{ => py}/boj/7569.md (100%) rename src/grap3fruit/{ => py}/boj/7569.py (100%) rename src/grap3fruit/{ => py}/boj/9095.md (100%) rename src/grap3fruit/{ => py}/boj/9095.py (100%) rename src/grap3fruit/{ => py}/input_test.py (100%) rename src/grap3fruit/{programmers/py => py/programmers}/17685.py (100%) rename src/grap3fruit/{programmers/py => py/programmers}/42578.py (100%) rename src/grap3fruit/{programmers/py => py/programmers}/60057.py (100%) diff --git a/src/grap3fruit/goorm/43089.js b/src/grap3fruit/goorm/43089.js deleted file mode 100644 index 26169ca..0000000 --- a/src/grap3fruit/goorm/43089.js +++ /dev/null @@ -1,27 +0,0 @@ -// Run by Node.js -const getResultLength = (data) => { - dataArr = data[0].split(''); - // console.log(dataArr) - const result = dataArr.filter((el) => el === data[1]); - return result.length; -}; - -const readline = require('readline'); -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); - -let count = 0; -let n = 2; -data = []; -rl.on('line', function (line) { - data.push(line); - count += 1; - if (count === n) { - rl.close(); - } -}).on('close', function () { - console.log(getResultLength(data)); - process.exit(); -}); diff --git a/src/grap3fruit/goorm/43125.js b/src/grap3fruit/goorm/43125.js deleted file mode 100644 index 9087227..0000000 --- a/src/grap3fruit/goorm/43125.js +++ /dev/null @@ -1,29 +0,0 @@ -// Run by Node.js - -const readline = require('readline'); -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); - -let N = 0; -// const data = []; -let count = 0; - -rl.on('line', function (line) { - if (!N) { - N = +line; - } else { - const data = line.split(' ').map((el) => +el); - let min = data[0]; - for (let i = 1; i < data.length; i++) { - if (data[i] < min) { - min = data[i]; - } - } - console.log(min); - rl.close(); - } -}).on('close', function () { - process.exit(); -}); diff --git a/src/grap3fruit/goorm/88520.js b/src/grap3fruit/goorm/88520.js deleted file mode 100644 index cb71b2c..0000000 --- a/src/grap3fruit/goorm/88520.js +++ /dev/null @@ -1,64 +0,0 @@ -const print = (data) => { - console.log(data); -}; - -const getTrashCount = (data, A, B, K) => { - let count = 0; - for (let i = A; i < A + K; i++) { - for (let j = B; j < B + K; j++) { - if (data[i][j] === 1) { - count += 1; - } - } - } - return count; -}; - -const solution = (data, info) => { - const [N, K] = info; - let min_result = K * K; - for (let i = 0; i < N - K + 1; i++) { - for (let j = 0; j < N - K + 1; j++) { - min_result = Math.min(min_result, getTrashCount(data, i, j, K)); - } - } - console.log(min_result); -}; - -const readline = require('readline'); - -(async () => { - let rl = readline.createInterface({ input: process.stdin }); - - let T = null; - let info = null; // N, K - let data = []; - let count_T = 0; - let count_N = 0; - for await (const line of rl) { - if (!T) { - T = +line; - } else if (T && !info) { - info = line.split(' ').map((el) => +el); - } else { - data.push(line.split(' ').map((el) => +el)); - count_N += 1; - } - if (T && info) { - if (info[0] === count_N) { - // 로직 수행 & 초기화 - print(data); - solution(data, info); - - info = null; // N, K - data = []; - count_T = 0; - count_N = 0; - } - } - } - - // rl.close(); - - process.exit(); -})(); diff --git a/src/grap3fruit/goorm/input.js b/src/grap3fruit/js/goorm/input1.js similarity index 100% rename from src/grap3fruit/goorm/input.js rename to src/grap3fruit/js/goorm/input1.js diff --git a/src/grap3fruit/js/goorm/input1.md b/src/grap3fruit/js/goorm/input1.md new file mode 100644 index 0000000..e69de29 diff --git a/src/grap3fruit/goorm/input1_2.js b/src/grap3fruit/js/goorm/input1_2.js similarity index 91% rename from src/grap3fruit/goorm/input1_2.js rename to src/grap3fruit/js/goorm/input1_2.js index 9577ac4..44c143c 100644 --- a/src/grap3fruit/goorm/input1_2.js +++ b/src/grap3fruit/js/goorm/input1_2.js @@ -1,4 +1,4 @@ -const print = (N, info, data) => { +const solution = (N, info, data) => { console.log(N); console.log(info); console.log(data); @@ -32,6 +32,6 @@ rl.on('line', function (line) { rl.close(); } }).on('close', function () { - print(N, info, data); + solution(N, info, data); process.exit(); }); diff --git a/src/grap3fruit/goorm/input2.js b/src/grap3fruit/js/goorm/input2.js similarity index 52% rename from src/grap3fruit/goorm/input2.js rename to src/grap3fruit/js/goorm/input2.js index e3b2161..ecd6f81 100644 --- a/src/grap3fruit/goorm/input2.js +++ b/src/grap3fruit/js/goorm/input2.js @@ -1,4 +1,4 @@ -const print = (N, data) => { +const solution = (N, data) => { console.log(N); console.log(data); }; @@ -15,8 +15,10 @@ const readline = require('readline'); if (!N) { N = +line; } else { - data.push(line.split('').map((el) => +el)); - // data.push(line); + // data.push(line); // 1 2 3 4 5 -> ['1 2 3 4 5'] + // data.push(line.split(' ').map((el) => +el)); // 1 2 3 4 5 -> [1,2,3,4,5] + // data.push(line.split('').map((el) => el)); // 12345 -> ['1','2','3','4','5'] + data.push(line.split('').map((el) => +el)); // 12345 -> [1,2,3,4,5] count += 1; } if (N === count) { @@ -24,10 +26,6 @@ const readline = require('readline'); } } - data.forEach((el) => { - console.log('len: ', el.length); - }); - - print(N, data); + solution(N, data); process.exit(); })(); diff --git a/src/grap3fruit/js/goorm/input2.md b/src/grap3fruit/js/goorm/input2.md new file mode 100644 index 0000000..cb7eff6 --- /dev/null +++ b/src/grap3fruit/js/goorm/input2.md @@ -0,0 +1,61 @@ +test case + +``` +5 +12345 +23456 +34567 +45678 +56789 +``` + +결과 + +``` +5 +[ + [1,2,3,4,5], + [2,3,4,5,6], + [3,4,5,6,7], + [4,5,6,7,8], + [5,6,7,8,9] +] +``` + +```javascript +const print = (N, data) => { + console.log(N); + console.log(data); +}; + +const readline = require('readline'); + +(async () => { + let rl = readline.createInterface({ input: process.stdin }); + let N = null; + let count = 0; + const data = []; + + for await (const line of rl) { + if (!N) { + N = +line; + } else { + // data.push(line); // 1 2 3 4 5 -> ['1 2 3 4 5'] + // data.push(line.split(' ').map((el) => +el)); // 1 2 3 4 5 -> [1,2,3,4,5] + // data.push(line.split('').map((el) => el)); // 12345 -> ['1','2','3','4','5'] + data.push(line.split('').map((el) => +el)); // 12345 -> [1,2,3,4,5] + count += 1; + } + if (N === count) { + rl.close(); + } + } + + data.forEach((el) => { + console.log('len: ', el.length); + }); + + print(N, data); + process.exit(); +})(); +``` diff --git a/src/grap3fruit/programmers/js/12904.js b/src/grap3fruit/js/programmers/12904.js similarity index 100% rename from src/grap3fruit/programmers/js/12904.js rename to src/grap3fruit/js/programmers/12904.js diff --git a/src/grap3fruit/programmers/js/12904.md b/src/grap3fruit/js/programmers/12904.md similarity index 100% rename from src/grap3fruit/programmers/js/12904.md rename to src/grap3fruit/js/programmers/12904.md diff --git a/src/grap3fruit/programmers/js/64061.js b/src/grap3fruit/js/programmers/64061.js similarity index 100% rename from src/grap3fruit/programmers/js/64061.js rename to src/grap3fruit/js/programmers/64061.js diff --git a/src/grap3fruit/programmers/js/64061.md b/src/grap3fruit/js/programmers/64061.md similarity index 100% rename from src/grap3fruit/programmers/js/64061.md rename to src/grap3fruit/js/programmers/64061.md diff --git a/src/grap3fruit/programmers/js/64061_2.js b/src/grap3fruit/js/programmers/64061_2.js similarity index 100% rename from src/grap3fruit/programmers/js/64061_2.js rename to src/grap3fruit/js/programmers/64061_2.js diff --git a/src/grap3fruit/programmers/js/64065.js b/src/grap3fruit/js/programmers/64065.js similarity index 100% rename from src/grap3fruit/programmers/js/64065.js rename to src/grap3fruit/js/programmers/64065.js diff --git a/src/grap3fruit/programmers/js/64065.md b/src/grap3fruit/js/programmers/64065.md similarity index 100% rename from src/grap3fruit/programmers/js/64065.md rename to src/grap3fruit/js/programmers/64065.md diff --git a/src/grap3fruit/boj/1010.md b/src/grap3fruit/py/boj/1010.md similarity index 100% rename from src/grap3fruit/boj/1010.md rename to src/grap3fruit/py/boj/1010.md diff --git a/src/grap3fruit/boj/1010.py b/src/grap3fruit/py/boj/1010.py similarity index 100% rename from src/grap3fruit/boj/1010.py rename to src/grap3fruit/py/boj/1010.py diff --git a/src/grap3fruit/boj/1094.md b/src/grap3fruit/py/boj/1094.md similarity index 100% rename from src/grap3fruit/boj/1094.md rename to src/grap3fruit/py/boj/1094.md diff --git a/src/grap3fruit/boj/1094.py b/src/grap3fruit/py/boj/1094.py similarity index 100% rename from src/grap3fruit/boj/1094.py rename to src/grap3fruit/py/boj/1094.py diff --git a/src/grap3fruit/boj/11047.md b/src/grap3fruit/py/boj/11047.md similarity index 100% rename from src/grap3fruit/boj/11047.md rename to src/grap3fruit/py/boj/11047.md diff --git a/src/grap3fruit/boj/11047.py b/src/grap3fruit/py/boj/11047.py similarity index 100% rename from src/grap3fruit/boj/11047.py rename to src/grap3fruit/py/boj/11047.py diff --git a/src/grap3fruit/boj/11286.py b/src/grap3fruit/py/boj/11286.py similarity index 92% rename from src/grap3fruit/boj/11286.py rename to src/grap3fruit/py/boj/11286.py index 690cae3..35748d4 100644 --- a/src/grap3fruit/boj/11286.py +++ b/src/grap3fruit/py/boj/11286.py @@ -1,39 +1,39 @@ -import heapq -import sys - -# n = 18 -# x = [1, -# -1, -# 0, -# 0, -# 0, -# 1, -# 1, -# -1, -# -1, -# 2, -# -2, -# 0, -# 0, -# 0, -# 0, -# 0, -# 0, -# 0] - -n = int(sys.stdin.readline().strip()) -heap = [] -x = [] -for i in range(0, n): - x.append(int(sys.stdin.readline().strip())) - -for i in range(0,n): - if x[i] == 0: - if len(heap) == 0: - print(0) - continue - - print(heapq.heappop(heap)[1]) - continue - if x[i] != 0: - heapq.heappush(heap,(abs(x[i]),x[i])) +import heapq +import sys + +# n = 18 +# x = [1, +# -1, +# 0, +# 0, +# 0, +# 1, +# 1, +# -1, +# -1, +# 2, +# -2, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0] + +n = int(sys.stdin.readline().strip()) +heap = [] +x = [] +for i in range(0, n): + x.append(int(sys.stdin.readline().strip())) + +for i in range(0,n): + if x[i] == 0: + if len(heap) == 0: + print(0) + continue + + print(heapq.heappop(heap)[1]) + continue + if x[i] != 0: + heapq.heappush(heap,(abs(x[i]),x[i])) diff --git a/src/grap3fruit/boj/11399.md b/src/grap3fruit/py/boj/11399.md similarity index 100% rename from src/grap3fruit/boj/11399.md rename to src/grap3fruit/py/boj/11399.md diff --git a/src/grap3fruit/boj/11399.py b/src/grap3fruit/py/boj/11399.py similarity index 100% rename from src/grap3fruit/boj/11399.py rename to src/grap3fruit/py/boj/11399.py diff --git a/src/grap3fruit/boj/1149.md b/src/grap3fruit/py/boj/1149.md similarity index 100% rename from src/grap3fruit/boj/1149.md rename to src/grap3fruit/py/boj/1149.md diff --git a/src/grap3fruit/boj/1149.py b/src/grap3fruit/py/boj/1149.py similarity index 100% rename from src/grap3fruit/boj/1149.py rename to src/grap3fruit/py/boj/1149.py diff --git a/src/grap3fruit/boj/11497.md b/src/grap3fruit/py/boj/11497.md similarity index 100% rename from src/grap3fruit/boj/11497.md rename to src/grap3fruit/py/boj/11497.md diff --git a/src/grap3fruit/boj/11497.py b/src/grap3fruit/py/boj/11497.py similarity index 100% rename from src/grap3fruit/boj/11497.py rename to src/grap3fruit/py/boj/11497.py diff --git a/src/grap3fruit/boj/11727.md b/src/grap3fruit/py/boj/11727.md similarity index 100% rename from src/grap3fruit/boj/11727.md rename to src/grap3fruit/py/boj/11727.md diff --git a/src/grap3fruit/boj/11727.py b/src/grap3fruit/py/boj/11727.py similarity index 100% rename from src/grap3fruit/boj/11727.py rename to src/grap3fruit/py/boj/11727.py diff --git a/src/grap3fruit/boj/1254.md b/src/grap3fruit/py/boj/1254.md similarity index 100% rename from src/grap3fruit/boj/1254.md rename to src/grap3fruit/py/boj/1254.md diff --git a/src/grap3fruit/boj/1254.py b/src/grap3fruit/py/boj/1254.py similarity index 100% rename from src/grap3fruit/boj/1254.py rename to src/grap3fruit/py/boj/1254.py diff --git a/src/grap3fruit/boj/12731.md b/src/grap3fruit/py/boj/12731.md similarity index 100% rename from src/grap3fruit/boj/12731.md rename to src/grap3fruit/py/boj/12731.md diff --git a/src/grap3fruit/boj/12731.py b/src/grap3fruit/py/boj/12731.py similarity index 100% rename from src/grap3fruit/boj/12731.py rename to src/grap3fruit/py/boj/12731.py diff --git a/src/grap3fruit/boj/1316.py b/src/grap3fruit/py/boj/1316.py similarity index 100% rename from src/grap3fruit/boj/1316.py rename to src/grap3fruit/py/boj/1316.py diff --git a/src/grap3fruit/boj/14889.md b/src/grap3fruit/py/boj/14889.md similarity index 100% rename from src/grap3fruit/boj/14889.md rename to src/grap3fruit/py/boj/14889.md diff --git a/src/grap3fruit/boj/14889.py b/src/grap3fruit/py/boj/14889.py similarity index 100% rename from src/grap3fruit/boj/14889.py rename to src/grap3fruit/py/boj/14889.py diff --git a/src/grap3fruit/boj/1697.md b/src/grap3fruit/py/boj/1697.md similarity index 100% rename from src/grap3fruit/boj/1697.md rename to src/grap3fruit/py/boj/1697.md diff --git a/src/grap3fruit/boj/1697.py b/src/grap3fruit/py/boj/1697.py similarity index 100% rename from src/grap3fruit/boj/1697.py rename to src/grap3fruit/py/boj/1697.py diff --git a/src/grap3fruit/boj/17609.md b/src/grap3fruit/py/boj/17609.md similarity index 100% rename from src/grap3fruit/boj/17609.md rename to src/grap3fruit/py/boj/17609.md diff --git a/src/grap3fruit/boj/17609.py b/src/grap3fruit/py/boj/17609.py similarity index 100% rename from src/grap3fruit/boj/17609.py rename to src/grap3fruit/py/boj/17609.py diff --git a/src/grap3fruit/boj/18233.md b/src/grap3fruit/py/boj/18233.md similarity index 100% rename from src/grap3fruit/boj/18233.md rename to src/grap3fruit/py/boj/18233.md diff --git a/src/grap3fruit/boj/18233.py b/src/grap3fruit/py/boj/18233.py similarity index 100% rename from src/grap3fruit/boj/18233.py rename to src/grap3fruit/py/boj/18233.py diff --git a/src/grap3fruit/boj/19238.py b/src/grap3fruit/py/boj/19238.py similarity index 100% rename from src/grap3fruit/boj/19238.py rename to src/grap3fruit/py/boj/19238.py diff --git a/src/grap3fruit/boj/1932.md b/src/grap3fruit/py/boj/1932.md similarity index 100% rename from src/grap3fruit/boj/1932.md rename to src/grap3fruit/py/boj/1932.md diff --git a/src/grap3fruit/boj/1932.py b/src/grap3fruit/py/boj/1932.py similarity index 100% rename from src/grap3fruit/boj/1932.py rename to src/grap3fruit/py/boj/1932.py diff --git a/src/grap3fruit/boj/1946.md b/src/grap3fruit/py/boj/1946.md similarity index 100% rename from src/grap3fruit/boj/1946.md rename to src/grap3fruit/py/boj/1946.md diff --git a/src/grap3fruit/boj/1946.py b/src/grap3fruit/py/boj/1946.py similarity index 100% rename from src/grap3fruit/boj/1946.py rename to src/grap3fruit/py/boj/1946.py diff --git a/src/grap3fruit/boj/1991.py b/src/grap3fruit/py/boj/1991.py similarity index 100% rename from src/grap3fruit/boj/1991.py rename to src/grap3fruit/py/boj/1991.py diff --git a/src/grap3fruit/boj/2011.md b/src/grap3fruit/py/boj/2011.md similarity index 100% rename from src/grap3fruit/boj/2011.md rename to src/grap3fruit/py/boj/2011.md diff --git a/src/grap3fruit/boj/2011.py b/src/grap3fruit/py/boj/2011.py similarity index 100% rename from src/grap3fruit/boj/2011.py rename to src/grap3fruit/py/boj/2011.py diff --git a/src/grap3fruit/boj/2178.md b/src/grap3fruit/py/boj/2178.md similarity index 100% rename from src/grap3fruit/boj/2178.md rename to src/grap3fruit/py/boj/2178.md diff --git a/src/grap3fruit/boj/2178.py b/src/grap3fruit/py/boj/2178.py similarity index 100% rename from src/grap3fruit/boj/2178.py rename to src/grap3fruit/py/boj/2178.py diff --git a/src/grap3fruit/boj/2502.md b/src/grap3fruit/py/boj/2502.md similarity index 100% rename from src/grap3fruit/boj/2502.md rename to src/grap3fruit/py/boj/2502.md diff --git a/src/grap3fruit/boj/2502.py b/src/grap3fruit/py/boj/2502.py similarity index 100% rename from src/grap3fruit/boj/2502.py rename to src/grap3fruit/py/boj/2502.py diff --git a/src/grap3fruit/boj/2579.md b/src/grap3fruit/py/boj/2579.md similarity index 100% rename from src/grap3fruit/boj/2579.md rename to src/grap3fruit/py/boj/2579.md diff --git a/src/grap3fruit/boj/2579.py b/src/grap3fruit/py/boj/2579.py similarity index 100% rename from src/grap3fruit/boj/2579.py rename to src/grap3fruit/py/boj/2579.py diff --git a/src/grap3fruit/boj/2606.md b/src/grap3fruit/py/boj/2606.md similarity index 100% rename from src/grap3fruit/boj/2606.md rename to src/grap3fruit/py/boj/2606.md diff --git a/src/grap3fruit/boj/2606.py b/src/grap3fruit/py/boj/2606.py similarity index 100% rename from src/grap3fruit/boj/2606.py rename to src/grap3fruit/py/boj/2606.py diff --git a/src/grap3fruit/boj/2644.md b/src/grap3fruit/py/boj/2644.md similarity index 100% rename from src/grap3fruit/boj/2644.md rename to src/grap3fruit/py/boj/2644.md diff --git a/src/grap3fruit/boj/2644.py b/src/grap3fruit/py/boj/2644.py similarity index 100% rename from src/grap3fruit/boj/2644.py rename to src/grap3fruit/py/boj/2644.py diff --git a/src/grap3fruit/boj/2957.py b/src/grap3fruit/py/boj/2957.py similarity index 100% rename from src/grap3fruit/boj/2957.py rename to src/grap3fruit/py/boj/2957.py diff --git a/src/grap3fruit/boj/7569.md b/src/grap3fruit/py/boj/7569.md similarity index 100% rename from src/grap3fruit/boj/7569.md rename to src/grap3fruit/py/boj/7569.md diff --git a/src/grap3fruit/boj/7569.py b/src/grap3fruit/py/boj/7569.py similarity index 100% rename from src/grap3fruit/boj/7569.py rename to src/grap3fruit/py/boj/7569.py diff --git a/src/grap3fruit/boj/9095.md b/src/grap3fruit/py/boj/9095.md similarity index 100% rename from src/grap3fruit/boj/9095.md rename to src/grap3fruit/py/boj/9095.md diff --git a/src/grap3fruit/boj/9095.py b/src/grap3fruit/py/boj/9095.py similarity index 100% rename from src/grap3fruit/boj/9095.py rename to src/grap3fruit/py/boj/9095.py diff --git a/src/grap3fruit/input_test.py b/src/grap3fruit/py/input_test.py similarity index 100% rename from src/grap3fruit/input_test.py rename to src/grap3fruit/py/input_test.py diff --git a/src/grap3fruit/programmers/py/17685.py b/src/grap3fruit/py/programmers/17685.py similarity index 100% rename from src/grap3fruit/programmers/py/17685.py rename to src/grap3fruit/py/programmers/17685.py diff --git a/src/grap3fruit/programmers/py/42578.py b/src/grap3fruit/py/programmers/42578.py similarity index 100% rename from src/grap3fruit/programmers/py/42578.py rename to src/grap3fruit/py/programmers/42578.py diff --git a/src/grap3fruit/programmers/py/60057.py b/src/grap3fruit/py/programmers/60057.py similarity index 100% rename from src/grap3fruit/programmers/py/60057.py rename to src/grap3fruit/py/programmers/60057.py From 3cabe485e5cc8a7740aba4b956091c8289d763a4 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Sun, 3 Jan 2021 23:13:01 +0900 Subject: [PATCH 25/49] =?UTF-8?q?solve=20:=20programmers=20=EC=9C=84?= =?UTF-8?q?=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/week15.md | 7 +++++++ src/do02reen24/etc/programmers_42578.js | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/do02reen24/Review/week15.md create mode 100644 src/do02reen24/etc/programmers_42578.js diff --git a/src/do02reen24/Review/week15.md b/src/do02reen24/Review/week15.md new file mode 100644 index 0000000..7b70f0d --- /dev/null +++ b/src/do02reen24/Review/week15.md @@ -0,0 +1,7 @@ +# :fire: week15 + +## :ballot_box_with_check: 프로그래머스 위장(42578) + +- 조합의 개념을 사용하여 풀 수 있었다. +- 해당 옷을 아예 고르지 않는 경우도 있으므로 각 아이템 길이에 + 1 을 해주었다. +- 모든 옷을 안고르는 경우는 제외해야하므로 정답에서 - 1 을 해주었다. diff --git a/src/do02reen24/etc/programmers_42578.js b/src/do02reen24/etc/programmers_42578.js new file mode 100644 index 0000000..39d57b9 --- /dev/null +++ b/src/do02reen24/etc/programmers_42578.js @@ -0,0 +1,19 @@ +const getCombinationNumber = (object) => { + let combination = 1; + for (const key in object) { + const itemLength = object[key].length + 1; + combination *= itemLength; + } + return combination; +}; + +const solution = (clothes) => { + const closet = {}; + clothes.forEach(([cloth, clothType]) => { + closet[clothType] + ? closet[clothType].push(cloth) + : (closet[clothType] = [cloth]); + }); + + return getCombinationNumber(closet) - 1; +}; From 3dbc38466184f765ee6f04c756573ed0a19bf813 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Mon, 4 Jan 2021 15:25:04 +0900 Subject: [PATCH 26/49] =?UTF-8?q?solve=20:=20programmers=20=EC=98=81?= =?UTF-8?q?=EC=96=B4=20=EB=81=9D=EB=A7=90=EC=9E=87=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/Review/week15.md | 4 ++++ src/do02reen24/programmers_12981.js | 31 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/do02reen24/programmers_12981.js diff --git a/src/do02reen24/Review/week15.md b/src/do02reen24/Review/week15.md index 7b70f0d..0363baf 100644 --- a/src/do02reen24/Review/week15.md +++ b/src/do02reen24/Review/week15.md @@ -5,3 +5,7 @@ - 조합의 개념을 사용하여 풀 수 있었다. - 해당 옷을 아예 고르지 않는 경우도 있으므로 각 아이템 길이에 + 1 을 해주었다. - 모든 옷을 안고르는 경우는 제외해야하므로 정답에서 - 1 을 해주었다. + +## :ballot_box_with_check: 프로그래머스 영어 끝말잇기(12981) + +- 각 경우를 고려하여 처리해주었다. diff --git a/src/do02reen24/programmers_12981.js b/src/do02reen24/programmers_12981.js new file mode 100644 index 0000000..2b31345 --- /dev/null +++ b/src/do02reen24/programmers_12981.js @@ -0,0 +1,31 @@ +const failUser = (n, index) => { + let person = index % n; + let order = Math.floor(index / n) + 1; + if (person === 0) { + person = n; + order -= 1; + } + return [person, order]; +}; + +const getLastChar = (word) => word.charAt(word.length - 1); + +const solution = (n, words) => { + const dictionary = {}; + let lastChar = words[0][0]; + for (let index = 0; index < words.length; index += 1) { + const word = words[index]; + if (lastChar === word[0] && dictionary[word] === undefined) { + dictionary[word] = true; + lastChar = getLastChar(word); + continue; + } + return failUser(n, index + 1); + } + + return [0, 0]; +}; + +console.log( + solution(2, ['hello', 'one', 'even', 'never', 'now', 'world', 'draw']) +); From e586fba7ddf0d3a4235e4284b8aa023c6ef64921 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Mon, 4 Jan 2021 19:01:59 +0900 Subject: [PATCH 27/49] =?UTF-8?q?=ED=81=90=20=ED=99=9C=EC=9A=A9=EC=9D=84?= =?UTF-8?q?=20=EC=9C=84=ED=95=9C=20doublyLinkedList=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/js/doublyLinkedList.js | 108 ++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/grap3fruit/js/doublyLinkedList.js diff --git a/src/grap3fruit/js/doublyLinkedList.js b/src/grap3fruit/js/doublyLinkedList.js new file mode 100644 index 0000000..ead5907 --- /dev/null +++ b/src/grap3fruit/js/doublyLinkedList.js @@ -0,0 +1,108 @@ +class Node { + constructor(item) { + this.prev = null; + this.next = null; + this.item = item; + } +} + +class DoublyLinkedList { + constructor() { + this.head = new Node(null); + this.tail = new Node(null); + this.head.next = this.tail; + this.tail.prev = this.head; + this.length = 0; + } + + getLength() { + return this.length; + } + + push(item) { + const node = new Node(item); + this.length += 1; + + if (this.head.next === this.tail) { + node.prev = this.head; + node.next = this.tail; + this.head.next = node; + this.tail.prev = node; + return; + } + + let lastNode = this.tail.prev; + node.next = this.tail; + node.prev = lastNode; + lastNode.next = node; + this.tail.prev = node; + return; + } + + print() { + let current = this.head.next; + while (true) { + if (current === this.tail) { + return; + } + console.log(current.item); + current = current.next; + } + } + + pop() { + if (this.length === 0) { + return undefined; + } + this.length -= 1; + const popedNode = this.tail.prev; + popedNode.prev.next = this.tail; + this.tail.prev = popedNode.prev; + return popedNode.item; + } + + popLeft() { + if (this.length === 0) { + return undefined; + } + this.length -= 1; + const popedNode = this.head.next; + popedNode.next.prev = this.head; + this.head.next = popedNode.next; + return popedNode.item; + } + + filter(callback) { + let current = this.head.next; + const result = []; + while (current !== this.tail) { + console.log(current.item); + if (callback(current.item)) { + result.push(current.item); + } + current = current.next; + } + return result; + } +} + +const dl = new DoublyLinkedList(); + +dl.push([1, 0]); +dl.push([2, 1]); +dl.push([3, 1]); +dl.push([4, 2]); +dl.push([5, 2]); +console.log(dl.filter((el) => el[0] === 1 && el[1] === 0)); +console.log('---'); +console.log(dl.getLength()); +console.log('---'); +console.log(dl.popLeft()); +console.log('---'); +dl.print(); +console.log('---'); +console.log(dl.pop()); +console.log('---'); +console.log(dl.getLength()); +console.log('---'); +dl.print(); From 670e7ed1e46ea81bb9cad90abbc1239769552243 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Mon, 4 Jan 2021 19:02:30 +0900 Subject: [PATCH 28/49] =?UTF-8?q?=EA=B5=AC=EB=A6=84,=20boj=EC=97=90?= =?UTF-8?q?=EC=84=9C=20js=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EB=8A=94=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/js/boj/input1_1.js | 16 ++++++++ src/grap3fruit/js/boj/input1_2.js | 19 +++++++++ src/grap3fruit/js/boj/test | 4 ++ src/grap3fruit/js/boj/test2 | 5 +++ src/grap3fruit/js/goorm/input1.js | 4 +- src/grap3fruit/js/goorm/input1.md | 0 src/grap3fruit/js/goorm/input1_1.js | 23 +++++++++++ src/grap3fruit/js/goorm/input1_2.js | 21 ++++++---- src/grap3fruit/js/goorm/input1_3.js | 47 ++++++++++++++++++++++ src/grap3fruit/js/goorm/input2.js | 4 +- src/grap3fruit/js/goorm/input2.md | 61 ----------------------------- src/grap3fruit/js/input.md | 1 + 12 files changed, 132 insertions(+), 73 deletions(-) create mode 100644 src/grap3fruit/js/boj/input1_1.js create mode 100644 src/grap3fruit/js/boj/input1_2.js create mode 100644 src/grap3fruit/js/boj/test create mode 100644 src/grap3fruit/js/boj/test2 delete mode 100644 src/grap3fruit/js/goorm/input1.md create mode 100644 src/grap3fruit/js/goorm/input1_1.js create mode 100644 src/grap3fruit/js/goorm/input1_3.js delete mode 100644 src/grap3fruit/js/goorm/input2.md create mode 100644 src/grap3fruit/js/input.md diff --git a/src/grap3fruit/js/boj/input1_1.js b/src/grap3fruit/js/boj/input1_1.js new file mode 100644 index 0000000..bdf20f4 --- /dev/null +++ b/src/grap3fruit/js/boj/input1_1.js @@ -0,0 +1,16 @@ +const solution = (N, data) => { + console.log(N); + console.log(data); +}; + +let fs = require('fs'); +let input = fs.readFileSync('test').toString().split('\n'); + +const N = +input[0]; +const data = []; +for (let i = 1; i < N + 1; i++) { + // 위에서 N을 받을떄 input[0]이 빠져나갔기 때문에 1~N을 받아야한다. + data.push(input[i].split(' ').map((el) => +el)); +} + +solution(N, data); diff --git a/src/grap3fruit/js/boj/input1_2.js b/src/grap3fruit/js/boj/input1_2.js new file mode 100644 index 0000000..cf99e7a --- /dev/null +++ b/src/grap3fruit/js/boj/input1_2.js @@ -0,0 +1,19 @@ +const solution = (N, info, data) => { + console.log(N); + const [X, Y] = info; + console.log(X, Y); + console.log(data); +}; + +let fs = require('fs'); +let input = fs.readFileSync('test2').toString().split('\n'); + +const N = +input[0]; +const info = input[1].split(' ').map((el) => +el); +const data = []; +for (let i = 2; i < N + 2; i++) { + // 위에서 N을 받을떄 input[0]이 빠져나갔기 때문에 1~N을 받아야한다. + data.push(input[i].split(' ').map((el) => +el)); +} + +solution(N, info, data); diff --git a/src/grap3fruit/js/boj/test b/src/grap3fruit/js/boj/test new file mode 100644 index 0000000..80de847 --- /dev/null +++ b/src/grap3fruit/js/boj/test @@ -0,0 +1,4 @@ +3 +1 2 3 +2 3 4 +3 4 5 \ No newline at end of file diff --git a/src/grap3fruit/js/boj/test2 b/src/grap3fruit/js/boj/test2 new file mode 100644 index 0000000..67313fa --- /dev/null +++ b/src/grap3fruit/js/boj/test2 @@ -0,0 +1,5 @@ +3 +2 3 +1 2 3 +2 3 4 +3 4 5 \ No newline at end of file diff --git a/src/grap3fruit/js/goorm/input1.js b/src/grap3fruit/js/goorm/input1.js index dc5cb8e..2acbab0 100644 --- a/src/grap3fruit/js/goorm/input1.js +++ b/src/grap3fruit/js/goorm/input1.js @@ -1,4 +1,4 @@ -const print = (N, data) => { +const solution = (N, data) => { console.log(N); console.log(data); }; @@ -28,6 +28,6 @@ rl.on('line', function (line) { rl.close(); } }).on('close', function () { - print(N, data); + solution(N, data); process.exit(); }); diff --git a/src/grap3fruit/js/goorm/input1.md b/src/grap3fruit/js/goorm/input1.md deleted file mode 100644 index e69de29..0000000 diff --git a/src/grap3fruit/js/goorm/input1_1.js b/src/grap3fruit/js/goorm/input1_1.js new file mode 100644 index 0000000..de07578 --- /dev/null +++ b/src/grap3fruit/js/goorm/input1_1.js @@ -0,0 +1,23 @@ +const solution = (data) => { + console.log(data); +}; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let data = []; + +rl.on('line', function (line) { + data.push(line); + // data = line.split('').map((el) => el); + // data = line.split(' ').map((el) => el); + // data = line.split('').map((el) => +el); + + rl.close(); +}).on('close', function () { + solution(data); + process.exit(); +}); diff --git a/src/grap3fruit/js/goorm/input1_2.js b/src/grap3fruit/js/goorm/input1_2.js index 44c143c..ba0ba7e 100644 --- a/src/grap3fruit/js/goorm/input1_2.js +++ b/src/grap3fruit/js/goorm/input1_2.js @@ -1,6 +1,7 @@ const solution = (N, info, data) => { console.log(N); - console.log(info); + const [X, Y] = info; + console.log(X, Y); console.log(data); }; @@ -16,22 +17,26 @@ let count = 0; const data = []; rl.on('line', function (line) { - console.log(line); if (!N) { + // N이 null이면 N = +line; - } else if (N && !info) { + } else if (!info) { + // N이 null이 아닌데, info가 null이면 info = line.split(' ').map((el) => +el); } else { - data.push(line.split(' ').map((el) => +el)); + // N과 info가 null이 아니면 + data.push(line); // data.push(line.split('').map((el) => +el)); // data.push(line.split('').map((el) => el)); - // data.push(line); - count += 1; + // data.push(line.split(' ').map((el) => +el)); + count += 1; // data를 입력받으면 count를 증가시켜주고 } if (count === N) { + // count가 입력받아야하는 N일때 rl.close()를 호출해준다. rl.close(); } }).on('close', function () { - solution(N, info, data); - process.exit(); + // rl.close()를 호출하면 이 콜백함수로 들어오고 + solution(N, info, data); // solution을 실행 한 후 + process.exit(); // 프로세스를 종료한다. }); diff --git a/src/grap3fruit/js/goorm/input1_3.js b/src/grap3fruit/js/goorm/input1_3.js new file mode 100644 index 0000000..9784cef --- /dev/null +++ b/src/grap3fruit/js/goorm/input1_3.js @@ -0,0 +1,47 @@ +const solution = (N, data) => { + console.log(N); + console.log(data); +}; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let T = null; +let N = null; +let info = null; +let countN = 0; +let countT = 0; +let data = []; + +rl.on('line', function (line) { + if (!T) { + T = +line; + } else if (!N) { + N = +line; + } else { + data.push(line); + // data.push(line.split('').map((el) => +el)); + // data.push(line.split('').map((el) => el)); + // data.push(line.split(' ').map((el) => +el)); + countN += 1; // data를 입력받으면 countN을 증가시켜주고 + } + if (countN === N) { + // N만큼 data를 잘 입력 받았으면 + solution(N, data); // solution을 호출하고 + N = null; // T, countT를 제외한 값들을 초기화해준다. + info = null; + countN = 0; + data = []; + + countT += 1; // 그리고 테스트 케이스 하나를 통과했으니 countT를 1 올려준다. + } + if (countT === T) { + // 입력받은 T 만큼 테스트 케이스를 통과하게되면 + rl.close(); // rl.close()를 호출하고 + } +}).on('close', function () { + process.exit(); // 종료한다. +}); diff --git a/src/grap3fruit/js/goorm/input2.js b/src/grap3fruit/js/goorm/input2.js index ecd6f81..e52121d 100644 --- a/src/grap3fruit/js/goorm/input2.js +++ b/src/grap3fruit/js/goorm/input2.js @@ -15,10 +15,10 @@ const readline = require('readline'); if (!N) { N = +line; } else { - // data.push(line); // 1 2 3 4 5 -> ['1 2 3 4 5'] + data.push(line); // 1 2 3 4 5 -> ['1 2 3 4 5'] // data.push(line.split(' ').map((el) => +el)); // 1 2 3 4 5 -> [1,2,3,4,5] // data.push(line.split('').map((el) => el)); // 12345 -> ['1','2','3','4','5'] - data.push(line.split('').map((el) => +el)); // 12345 -> [1,2,3,4,5] + // data.push(line.split('').map((el) => +el)); // 12345 -> [1,2,3,4,5] count += 1; } if (N === count) { diff --git a/src/grap3fruit/js/goorm/input2.md b/src/grap3fruit/js/goorm/input2.md deleted file mode 100644 index cb7eff6..0000000 --- a/src/grap3fruit/js/goorm/input2.md +++ /dev/null @@ -1,61 +0,0 @@ -test case - -``` -5 -12345 -23456 -34567 -45678 -56789 -``` - -결과 - -``` -5 -[ - [1,2,3,4,5], - [2,3,4,5,6], - [3,4,5,6,7], - [4,5,6,7,8], - [5,6,7,8,9] -] -``` - -```javascript -const print = (N, data) => { - console.log(N); - console.log(data); -}; - -const readline = require('readline'); - -(async () => { - let rl = readline.createInterface({ input: process.stdin }); - let N = null; - let count = 0; - const data = []; - - for await (const line of rl) { - if (!N) { - N = +line; - } else { - // data.push(line); // 1 2 3 4 5 -> ['1 2 3 4 5'] - // data.push(line.split(' ').map((el) => +el)); // 1 2 3 4 5 -> [1,2,3,4,5] - // data.push(line.split('').map((el) => el)); // 12345 -> ['1','2','3','4','5'] - data.push(line.split('').map((el) => +el)); // 12345 -> [1,2,3,4,5] - count += 1; - } - if (N === count) { - rl.close(); - } - } - - data.forEach((el) => { - console.log('len: ', el.length); - }); - - print(N, data); - process.exit(); -})(); -``` diff --git a/src/grap3fruit/js/input.md b/src/grap3fruit/js/input.md new file mode 100644 index 0000000..130cd01 --- /dev/null +++ b/src/grap3fruit/js/input.md @@ -0,0 +1 @@ +[구름(goorm), 백준(BOJ) 코딩 테스트 JavaScript로 입력받는 방법 정리](https://velog.io/@grap3fruit/%EA%B5%AC%EB%A6%84goorm-%EC%BD%94%ED%85%8C-javascript-%EB%A1%9C-%EC%9E%85%EB%A0%A5%EA%B0%92-%EB%B0%9B%EB%8A%94-%EB%B0%A9%EB%B2%95?fbclid=IwAR2HHZP8nb6pgOnBkFvDFmHJ3NCjj7bQBIogNjWRwBQ2sgDVu3l6LEZ94_4) 블로그 글 작성 From c9d588252b9fba07694c09efd9eebd7b7e1a211f Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Mon, 4 Jan 2021 19:09:14 +0900 Subject: [PATCH 29/49] =?UTF-8?q?[refactor]=20=EB=B8=94=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=20=EB=A7=81=ED=81=AC=20=EC=A3=BC=EC=86=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/js/input.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/grap3fruit/js/input.md b/src/grap3fruit/js/input.md index 130cd01..e9036a9 100644 --- a/src/grap3fruit/js/input.md +++ b/src/grap3fruit/js/input.md @@ -1 +1 @@ -[구름(goorm), 백준(BOJ) 코딩 테스트 JavaScript로 입력받는 방법 정리](https://velog.io/@grap3fruit/%EA%B5%AC%EB%A6%84goorm-%EC%BD%94%ED%85%8C-javascript-%EB%A1%9C-%EC%9E%85%EB%A0%A5%EA%B0%92-%EB%B0%9B%EB%8A%94-%EB%B0%A9%EB%B2%95?fbclid=IwAR2HHZP8nb6pgOnBkFvDFmHJ3NCjj7bQBIogNjWRwBQ2sgDVu3l6LEZ94_4) 블로그 글 작성 +[구름(goorm), 백준(BOJ) 코딩 테스트 JavaScript로 입력받는 방법 정리](https://velog.io/@grap3fruit/구름goorm-코테-javascript-로-입력값-받는-방법) 블로그 글 작성 From 70c6509269887771b56325b3eba8274218ef4e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Mon, 4 Jan 2021 21:46:47 +0900 Subject: [PATCH 30/49] =?UTF-8?q?add:=20queue=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/kyu9341/queue/queue.js | 53 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/kyu9341/queue/queue.js diff --git a/src/kyu9341/queue/queue.js b/src/kyu9341/queue/queue.js new file mode 100644 index 0000000..1a0747e --- /dev/null +++ b/src/kyu9341/queue/queue.js @@ -0,0 +1,53 @@ +class Node { + constructor(data) { + this.data = data; + this.next = null; + } +} + +class Queue { + constructor() { + this.head = null; + this.tail = null; + this.size = 0; + } + + push(data) { + const node = new Node(data); + if (this.isEmpty()) { + this.head = node; + this.head.next = this.tail; + } else this.tail.next = node; + + this.tail = node; + this.size += 1; + } + + pop() { + if (this.isEmpty()) return null; + if (this.head === this.tail) this.tail = null; + + const headData = this.head.data; + this.head = this.head.next; + this.size -= 1; + + return headData; + } + + isEmpty() { + return this.size === 0; + } + + getArray() { + const array = []; + if (this.isEmpty()) return array; + + let currentNode = this.head; + while (currentNode) { + array.push(currentNode.data); + currentNode = currentNode.next; + } + + return array; + } +} From ed57e46c70f81f2e2d9326203498439ff33e464a Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Tue, 5 Jan 2021 13:50:58 +0900 Subject: [PATCH 31/49] =?UTF-8?q?move=20:=20=ED=8C=8C=EC=9D=BC=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/{ => etc}/programmers_12981.js | 4 ---- 1 file changed, 4 deletions(-) rename src/do02reen24/{ => etc}/programmers_12981.js (87%) diff --git a/src/do02reen24/programmers_12981.js b/src/do02reen24/etc/programmers_12981.js similarity index 87% rename from src/do02reen24/programmers_12981.js rename to src/do02reen24/etc/programmers_12981.js index 2b31345..1411e33 100644 --- a/src/do02reen24/programmers_12981.js +++ b/src/do02reen24/etc/programmers_12981.js @@ -25,7 +25,3 @@ const solution = (n, words) => { return [0, 0]; }; - -console.log( - solution(2, ['hello', 'one', 'even', 'never', 'now', 'world', 'draw']) -); From ab0554efbee4fd2691d89b68f185074db825b442 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Tue, 5 Jan 2021 14:18:52 +0900 Subject: [PATCH 32/49] =?UTF-8?q?solve=20:=20programmers=20=EB=84=A4?= =?UTF-8?q?=ED=8A=B8=EC=9B=8C=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/do02reen24/BFS/programmers_43162.js | 23 +++++++++++++++++++++++ src/do02reen24/Review/week15.md | 5 +++++ 2 files changed, 28 insertions(+) create mode 100644 src/do02reen24/BFS/programmers_43162.js diff --git a/src/do02reen24/BFS/programmers_43162.js b/src/do02reen24/BFS/programmers_43162.js new file mode 100644 index 0000000..93110e2 --- /dev/null +++ b/src/do02reen24/BFS/programmers_43162.js @@ -0,0 +1,23 @@ +const solution = (n, computers) => { + let answer = 0; + const network = Array.from({ length: n }, () => 0); + + for (let i = 0; i < n; i += 1) { + if (network[i] !== 0) continue; + answer += 1; + network[i] = answer; + + const queue = [i]; + while (queue.length > 0) { + const visit = queue.pop(); + computers[visit].forEach((computer, index) => { + if (computer && network[index] === 0) { + queue.push(index); + network[index] = answer; + } + }); + } + } + + return answer; +}; diff --git a/src/do02reen24/Review/week15.md b/src/do02reen24/Review/week15.md index 0363baf..af356d6 100644 --- a/src/do02reen24/Review/week15.md +++ b/src/do02reen24/Review/week15.md @@ -9,3 +9,8 @@ ## :ballot_box_with_check: 프로그래머스 영어 끝말잇기(12981) - 각 경우를 고려하여 처리해주었다. + +## :ballot_box_with_check: 프로그래머스 네트워크(43162) + +- BFS의 개념을 활용하여 풀었다. +- 백준 2644번 문제와 비슷한 것 같다. From 5d7db95a13a24fa987a26996f6973c3cc32b1983 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Tue, 5 Jan 2021 14:44:40 +0900 Subject: [PATCH 33/49] =?UTF-8?q?remove=20:=20=EC=82=AC=EC=9A=A9=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=8C=8C=EC=9D=BC=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/200905.md | 11 ----------- contents/README.md | 11 ----------- mom/mom20200905.md | 23 ----------------------- 3 files changed, 45 deletions(-) delete mode 100644 contents/200905.md delete mode 100644 contents/README.md delete mode 100644 mom/mom20200905.md diff --git a/contents/200905.md b/contents/200905.md deleted file mode 100644 index d29072b..0000000 --- a/contents/200905.md +++ /dev/null @@ -1,11 +0,0 @@ -# :fire: 금주의 문제 (200905) - -> 이번 주 주제는 자료구조입니다. - -https://www.acmicpc.net/problem/1158 - -https://www.acmicpc.net/problem/1406 - -https://www.acmicpc.net/problem/2346 - -https://www.acmicpc.net/problem/2957 \ No newline at end of file diff --git a/contents/README.md b/contents/README.md deleted file mode 100644 index 8d294c7..0000000 --- a/contents/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# :fire: 금주의 문제 (200912) - -> 이번 주 주제는 자료구조 2탄입니다. - -https://www.acmicpc.net/problem/11286 - -https://programmers.co.kr/learn/courses/30/lessons/42578 - -https://www.acmicpc.net/problem/1991 - -https://www.acmicpc.net/problem/2957 diff --git a/mom/mom20200905.md b/mom/mom20200905.md deleted file mode 100644 index ca4e8ee..0000000 --- a/mom/mom20200905.md +++ /dev/null @@ -1,23 +0,0 @@ -# :family_man_man_girl_boy: 회의록 - -### :question: 개인의 생활에 있어서 미션에 힘듦이 있었나. - -- 미션에 열중하느라 알고리즘에 대해 공부할 시간이 없긴 했으나 쉬운 3 문제, 어려운 1 문제 유지하는 것은 좋은 것 같다. - -- 향후 계속적인 조율의 시간을 가지는 것이 좋을 것 같다. - - - -### :hammer: 향후 피어 세션 계획 - -- **10:00 ~ 10:15** 스터디에 대한 이야기 - -- **10:15 ~ 11:50** 코드 분석 및 알고리즘 공유 - -- **11:50 ~ 12:00** 다음 주제 선정 및 문제 공유 - - - -### :bell: 기타 - -- 2957번 문제와 같은 경우 다음 주까지 다시 풀어오기 \ No newline at end of file From 0fee3913d7111e989bb9df8bb98fec61b4a79002 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Tue, 5 Jan 2021 17:20:40 +0900 Subject: [PATCH 34/49] chore : gitignore update --- src/do02reen24/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/do02reen24/.gitignore b/src/do02reen24/.gitignore index 24ab719..57d45e2 100644 --- a/src/do02reen24/.gitignore +++ b/src/do02reen24/.gitignore @@ -1,2 +1,2 @@ -카카오코테 +코딩테스트 .vscode \ No newline at end of file From 9b5433d251f9f0581bb96697c5bf345341bab317 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Tue, 5 Jan 2021 17:21:37 +0900 Subject: [PATCH 35/49] solve : codility 4 problems - binary gap - cyclic rotation - odd occurrences in array - stone wall --- .../codility/1_BinaryGap.js" | 16 +++++++++++++++ .../codility/2_CyclicRotation.js" | 9 +++++++++ .../codility/2_OddOccurrencesInArray.js" | 11 ++++++++++ .../codility/7_StoneWall.js" | 20 +++++++++++++++++++ .../codility/score.md" | 8 ++++++++ 5 files changed, 64 insertions(+) create mode 100644 "src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/1_BinaryGap.js" create mode 100644 "src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_CyclicRotation.js" create mode 100644 "src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_OddOccurrencesInArray.js" create mode 100644 "src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/7_StoneWall.js" create mode 100644 "src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/1_BinaryGap.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/1_BinaryGap.js" new file mode 100644 index 0000000..09f2236 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/1_BinaryGap.js" @@ -0,0 +1,16 @@ +const solution = (N) => { + let maxLength = 0; + const bin = N.toString(2).split(''); + + bin.reduce((length, word) => { + if (word === '1') { + if (maxLength < length) maxLength = length; + return 0; + } + return length + 1; + }, 0); + + return maxLength; +}; + +console.log(solution(32)); diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_CyclicRotation.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_CyclicRotation.js" new file mode 100644 index 0000000..d0580a2 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_CyclicRotation.js" @@ -0,0 +1,9 @@ +const solution = (A, K) => { + const length = A.length; + const k = K % length; + const front = A.slice(length - k, length); + const end = A.slice(0, length - k); + return front.concat(end); +}; + +console.log(solution([3, 8, 9, 7, 6], 3)); diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_OddOccurrencesInArray.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_OddOccurrencesInArray.js" new file mode 100644 index 0000000..873c722 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_OddOccurrencesInArray.js" @@ -0,0 +1,11 @@ +const solution = (A) => { + const count = A.reduce((arr, num) => { + if (arr[num] === undefined) arr[num] = 1; + else arr[num] += 1; + return arr; + }, {}); + for (const num in count) { + if (count[num] % 2 !== 0) return num; + } + return -1; +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/7_StoneWall.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/7_StoneWall.js" new file mode 100644 index 0000000..67dd48d --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/7_StoneWall.js" @@ -0,0 +1,20 @@ +const solution = (H) => { + const queue = [H]; + let block = 0; + while (queue.length > 0) { + const h = queue.pop(); + if (h.length === 0) continue; + const min = Math.min.apply(null, h); + const remain = h.reduce((arr, cur) => { + if (cur === min) { + queue.push(arr); + return []; + } + arr.push(cur); + return arr; + }, []); + queue.push(remain); + block += 1; + } + return block; +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" new file mode 100644 index 0000000..4716041 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" @@ -0,0 +1,8 @@ +# 📋 Codility 점수 기록 + +| Lesson | 문제 | 점수 | 비고 | +| :-----------------: | :-------------------: | :--: | :-------------------: | +| 1-Iterations | BinaryGap | 100 | - | +| 2-Arrays | CyclicRotation | 100 | - | +| 2-Arrays | OddOccurrencesInArray | 100 | - | +| 7-Stacks and Queues | StoneWall | 85 | 정확도 100%, 성능 77% | From d1c9fff17bfe696a6c60785f8dce75ed811a20a3 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Tue, 5 Jan 2021 21:46:01 +0900 Subject: [PATCH 36/49] =?UTF-8?q?15=EC=A3=BC=EC=B0=A8=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/js/goorm/12981.js | 34 ++++++++++++++++++++ src/grap3fruit/js/goorm/42578.js | 26 +++++++++++++++ src/grap3fruit/js/goorm/43162.js | 54 ++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 src/grap3fruit/js/goorm/12981.js create mode 100644 src/grap3fruit/js/goorm/42578.js create mode 100644 src/grap3fruit/js/goorm/43162.js diff --git a/src/grap3fruit/js/goorm/12981.js b/src/grap3fruit/js/goorm/12981.js new file mode 100644 index 0000000..3a35eb8 --- /dev/null +++ b/src/grap3fruit/js/goorm/12981.js @@ -0,0 +1,34 @@ +const check = (words, n, word, idx, visited) => { + if (visited.includes(word)) { + return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; + } + if (idx > 0) { + if (words[idx - 1][words[idx - 1].length - 1] !== word[0]) { + return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; + } + } + return null; +}; + +function solution(n, words) { + let answer = null; + const visited = []; + + words.forEach((word, idx) => { + if (!answer) { + answer = check(words, n, word, idx, visited); + visited.push(word); + } + }); + if (!answer) { + answer = [0, 0]; + } + return answer; +} + +const n = 2; +const words = ['hello', 'two']; +// const words = ['hello', 'one', 'even', 'never', 'now', 'world', 'draw']; +// const words = ['tank', 'kick', 'know', 'wheel', 'land', 'dream', 'mother', 'robot', 'tank']; + +solution(n, words); diff --git a/src/grap3fruit/js/goorm/42578.js b/src/grap3fruit/js/goorm/42578.js new file mode 100644 index 0000000..3ec1378 --- /dev/null +++ b/src/grap3fruit/js/goorm/42578.js @@ -0,0 +1,26 @@ +function solution(clothes) { + let answer = 1; + const data = {}; + + clothes.forEach((cloth) => { + if (!data[cloth[1]]) { + return (data[cloth[1]] = [cloth[0]]); + } + data[cloth[1]].push(cloth[0]); + }); + + for (const el in data) { + answer *= data[el].length + 1; + } + answer -= 1; + + return answer; +} + +const clothes = [ + ['yellow_hat', 'headgear'], + ['blue_sunglasses', 'eyewear'], + ['green_turban', 'headgear'], +]; + +console.log(solution(clothes)); diff --git a/src/grap3fruit/js/goorm/43162.js b/src/grap3fruit/js/goorm/43162.js new file mode 100644 index 0000000..bcd9b98 --- /dev/null +++ b/src/grap3fruit/js/goorm/43162.js @@ -0,0 +1,54 @@ +const bfs = (computers, root) => { + const visited = [root]; + let q = [computers[root]]; + + while (q.length > 0) { + let item = q.shift(); + + item.forEach((el, idx) => { + if (el === 1 && !visited.includes(idx)) { + q.push(computers[idx]); + visited.push(idx); + } + }); + } + + return visited; +}; + +function solution(n, computers) { + let answer = 0; + const visited = []; + + computers.forEach((_, idx) => { + let visitFlag = false; + visited.forEach((el) => { + if (el.includes(idx)) { + visitFlag = true; + } + }); + + if (!visitFlag) { + const newVisited = bfs(computers, idx); + visited.push(newVisited); + } + }); + + console.log(visited.length); + answer = visited.length; + return answer; +} + +const n = 3; +const computers = [ + [1, 1, 0], + [1, 1, 0], + [0, 0, 1], +]; +// const computers = [ +// [1, 1, 0], +// [1, 1, 1], +// [0, 1, 1], +// ]; + +solution(n, computers); From b83a89af6b2f0a44e1000b0aeb4851c592ac0a12 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Tue, 5 Jan 2021 21:49:28 +0900 Subject: [PATCH 37/49] =?UTF-8?q?=EC=9C=84=EC=9E=A5=EB=AC=B8=EC=A0=9C=20ma?= =?UTF-8?q?p=EC=9C=BC=EB=A1=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/js/goorm/42578_2.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/grap3fruit/js/goorm/42578_2.js diff --git a/src/grap3fruit/js/goorm/42578_2.js b/src/grap3fruit/js/goorm/42578_2.js new file mode 100644 index 0000000..f7b369c --- /dev/null +++ b/src/grap3fruit/js/goorm/42578_2.js @@ -0,0 +1,29 @@ +function solution(clothes) { + let answer = 1; + console.log(clothes); + + const map = new Map(); + + clothes.forEach((cloth) => { + if (!map.get(cloth[1])) { + return map.set(cloth[1], [cloth[0]]); + } + + map.get(cloth[1]).push(cloth[0]); + }); + + for (let key of map.keys()) { + answer *= map.get(key).length + 1; + } + answer -= 1; + + return answer; +} + +const clothes = [ + ['yellow_hat', 'headgear'], + ['blue_sunglasses', 'eyewear'], + ['green_turban', 'headgear'], +]; + +console.log(solution(clothes)); From 90776e17d789982eb0e58646e07c0f3533c7cf33 Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Wed, 6 Jan 2021 00:36:01 +0900 Subject: [PATCH 38/49] solve : codility lesson3 problems --- .../codility/3_FrogJmp.js" | 3 +++ .../codility/3_PermMissingElem.js" | 12 ++++++++++ .../codility/3_TapeEquilibrium.js" | 13 +++++++++++ .../codility/score.md" | 23 ++++++++++++++----- 4 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 "src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_FrogJmp.js" create mode 100644 "src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_PermMissingElem.js" create mode 100644 "src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_FrogJmp.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_FrogJmp.js" new file mode 100644 index 0000000..dc00aa1 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_FrogJmp.js" @@ -0,0 +1,3 @@ +const solution = (X, Y, D) => { + return Math.ceil((Y - X) / D); +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_PermMissingElem.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_PermMissingElem.js" new file mode 100644 index 0000000..9833357 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_PermMissingElem.js" @@ -0,0 +1,12 @@ +const solution = (A) => { + const N = A.length + 1; + const isNum = {}; + A.forEach((a) => { + isNum[a] = true; + }); + for (let n = 1; n < N + 1; n += 1) { + if (isNum[n] === true) continue; + return n; + } + return -1; +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" new file mode 100644 index 0000000..8d5da62 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" @@ -0,0 +1,13 @@ +const solution = (A) => { + let answer; + let frontSum = 0; + let backSum = A.reduce((a, b) => a + b, 0); + for (let i = 0; i < A.length; i += 1) { + frontSum += A[i]; + backSum -= A[i]; + const absSub = Math.abs(frontSum - backSum); + if (absSub < answer || answer === undefined) answer = absSub; + } + + return answer; +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" index 4716041..59475bf 100644 --- "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" @@ -1,8 +1,19 @@ # 📋 Codility 점수 기록 -| Lesson | 문제 | 점수 | 비고 | -| :-----------------: | :-------------------: | :--: | :-------------------: | -| 1-Iterations | BinaryGap | 100 | - | -| 2-Arrays | CyclicRotation | 100 | - | -| 2-Arrays | OddOccurrencesInArray | 100 | - | -| 7-Stacks and Queues | StoneWall | 85 | 정확도 100%, 성능 77% | +| Lesson | 문제 | 점수 | 비고 | 최종 제출 날짜 | +| :-----------------: | :-------------------: | :--: | :-------------------: | :------------: | +| 1-Iterations | BinaryGap | 100 | - | 2021-01-05 | +| 2-Arrays | CyclicRotation | 100 | - | 2021-01-05 | +| 2-Arrays | OddOccurrencesInArray | 100 | - | 2021-01-05 | +| 3-Time Complexity | FrogJmp | 100 | - | 2021-01-06 | +| 3-Time Complexity | PermMissingElem | 100 | - | 2021-01-06 | +| 3-Time Complexity | TapeEquilibrium | 84 | 정확도 71%, 성능 100% | 2021-01-06 | +| 7-Stacks and Queues | StoneWall | 85 | 정확도 100%, 성능 77% | 2021-01-05 | + +# 📚 Perfect Lesson + +> 모든 문제를 100%로 끝낸 Lesson + +* Lesson1 - Iterations + +* Lesson2 - Arrays \ No newline at end of file From 0dc189b003d55d98df6ae7d301f3b569ae551bcc Mon Sep 17 00:00:00 2001 From: do02reen24 Date: Wed, 6 Jan 2021 00:42:35 +0900 Subject: [PATCH 39/49] =?UTF-8?q?solve=20:=20tape=20equilibrium=20-=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=EB=A1=9C=EC=A7=81=EC=97=90=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=EA=B0=80=20=EC=9E=88=EC=9D=8C=EC=9D=84=20=EB=B0=9C?= =?UTF-8?q?=EA=B2=AC=ED=95=98=EA=B3=A0=20=EC=9D=B4=EB=A5=BC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=ED=95=B4=EC=A3=BC=EC=97=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codility/3_TapeEquilibrium.js" | 2 +- .../codility/score.md" | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" index 8d5da62..3fc11e9 100644 --- "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" @@ -2,7 +2,7 @@ const solution = (A) => { let answer; let frontSum = 0; let backSum = A.reduce((a, b) => a + b, 0); - for (let i = 0; i < A.length; i += 1) { + for (let i = 0; i < A.length - 1; i += 1) { frontSum += A[i]; backSum -= A[i]; const absSub = Math.abs(frontSum - backSum); diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" index 59475bf..2debed9 100644 --- "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" @@ -7,7 +7,7 @@ | 2-Arrays | OddOccurrencesInArray | 100 | - | 2021-01-05 | | 3-Time Complexity | FrogJmp | 100 | - | 2021-01-06 | | 3-Time Complexity | PermMissingElem | 100 | - | 2021-01-06 | -| 3-Time Complexity | TapeEquilibrium | 84 | 정확도 71%, 성능 100% | 2021-01-06 | +| 3-Time Complexity | TapeEquilibrium | 100 | - | 2021-01-06 | | 7-Stacks and Queues | StoneWall | 85 | 정확도 100%, 성능 77% | 2021-01-05 | # 📚 Perfect Lesson @@ -16,4 +16,6 @@ * Lesson1 - Iterations -* Lesson2 - Arrays \ No newline at end of file +* Lesson2 - Arrays +* Lesson3 - Time Complexity + From 649fefb376b2615d7941b1a3001fa810c7626943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Wed, 6 Jan 2021 01:19:59 +0900 Subject: [PATCH 40/49] =?UTF-8?q?solve:=20programmers=20=EB=84=A4=ED=8A=B8?= =?UTF-8?q?=EC=9B=8C=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../index.js" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "src/kyu9341/programmers_\353\204\244\355\212\270\354\233\214\355\201\254/index.js" diff --git "a/src/kyu9341/programmers_\353\204\244\355\212\270\354\233\214\355\201\254/index.js" "b/src/kyu9341/programmers_\353\204\244\355\212\270\354\233\214\355\201\254/index.js" new file mode 100644 index 0000000..b095ce3 --- /dev/null +++ "b/src/kyu9341/programmers_\353\204\244\355\212\270\354\233\214\355\201\254/index.js" @@ -0,0 +1,50 @@ +const initArray = (size, val = null) => Array.from({ length: size }, () => val); +const initArrayInArray = size => + Array.from({ length: size }, () => new Array()); + +const solution = (n, computers) => { + const network = initArrayInArray(n); + const check = initArray(n, false); + + computers.forEach((row, rowIdx) => { + row.forEach((computer, colIdx) => { + if (rowIdx !== colIdx && computer) network[rowIdx].push(colIdx); + }); + }); + + const dfs = (node, network) => { + check[node] = true; + + network[node].forEach((_, computer) => { + const next = network[node][computer]; + if (!check[next]) dfs(next, network); + }); + }; + + const answer = network.reduce((acc, _, computer) => { + if (!check[computer]) { + dfs(computer, network); + return acc + 1; + } + return acc; + }, 0); + + return answer; +}; + +(() => { + const inputs = [ + [ + [1, 1, 0], + [1, 1, 0], + [0, 0, 1], + ], + [ + [1, 1, 0], + [1, 1, 1], + [0, 1, 1], + ], + ]; + + inputs.forEach(input => console.log(solution(input.length, input))); +})(); From 473584890b0524fa40bc3cd84ceb4aba0e7da526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Wed, 6 Jan 2021 01:20:34 +0900 Subject: [PATCH 41/49] =?UTF-8?q?solve:=20programmers=20=EC=9C=84=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../index.js" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "src/kyu9341/programmers_\354\234\204\354\236\245/index.js" diff --git "a/src/kyu9341/programmers_\354\234\204\354\236\245/index.js" "b/src/kyu9341/programmers_\354\234\204\354\236\245/index.js" new file mode 100644 index 0000000..c8a72df --- /dev/null +++ "b/src/kyu9341/programmers_\354\234\204\354\236\245/index.js" @@ -0,0 +1,23 @@ +const solution = clothes => { + const clothesMap = clothes.reduce((map, cur) => { + const countOfCurrentType = map.get(cur[1]); + + return map.set(cur[1], countOfCurrentType ? countOfCurrentType + 1 : 1); + }, new Map()); + + const count = + [...clothesMap.values()].reduce((acc, cur) => acc * (cur + 1), 1) - 1; + return count; +}; + +(() => { + const inputs = [ + [ + ['yellow_hat', 'headgear'], + ['blue_sunglasses', 'eyewear'], + ['green_turban', 'headgear'], + ], + ]; + + inputs.forEach(input => console.log(solution(input))); +})(); From 31950c5a8213a1bf602e28181a6ee01fca5ee211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=AF=E1=86=AB=E1=84=8B=E1=85=A7=E1=86=BC?= =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=AB?= Date: Wed, 6 Jan 2021 01:21:23 +0900 Subject: [PATCH 42/49] =?UTF-8?q?solve:=20programmers=20=EC=98=81=EC=96=B4?= =?UTF-8?q?=EB=81=9D=EB=A7=90=EC=9E=87=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../index.js" | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 "src/kyu9341/programmers_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260/index.js" diff --git "a/src/kyu9341/programmers_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260/index.js" "b/src/kyu9341/programmers_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260/index.js" new file mode 100644 index 0000000..b44f5f0 --- /dev/null +++ "b/src/kyu9341/programmers_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260/index.js" @@ -0,0 +1,63 @@ +const solution = (n, words) => { + const set = new Set(); + let prevWrod = ''; + + for (const [idx, word] of words.entries()) { + const beNotEqual = + idx && prevWrod.charAt(prevWrod.length - 1) !== word.charAt(0); + + if (set.has(word) || beNotEqual) { + const num = (idx + 1) % n || n; + const count = Math.floor((idx + 1) / n) + Number(num !== n); + + return [num, count]; + } + + set.add(word); + prevWrod = word; + } + + return [0, 0]; +}; + +(() => { + const inputs = [ + { + n: 3, + words: [ + 'tank', + 'kick', + 'know', + 'wheel', + 'land', + 'dream', + 'mother', + 'robot', + 'tank', + ], + }, + { + n: 5, + words: [ + 'hello', + 'observe', + 'effect', + 'take', + 'either', + 'recognize', + 'encourage', + 'ensure', + 'establish', + 'hang', + 'gather', + 'refer', + 'reference', + 'estimate', + 'executive', + ], + }, + { n: 2, words: ['hello', 'one', 'even', 'never', 'now', 'world', 'draw'] }, + ]; + + inputs.forEach(input => console.log(solution(input.n, input.words))); +})(); From dc58fe572e5083e0e7e70ebc895832683953df33 Mon Sep 17 00:00:00 2001 From: Do-ho Date: Wed, 6 Jan 2021 18:52:23 +0900 Subject: [PATCH 43/49] =?UTF-8?q?solve:=20programmers=20=EC=9C=84=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 조합을 통한 풀이 --- .../pgs_\354\234\204\354\236\245.js" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.js" diff --git "a/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.js" "b/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.js" new file mode 100644 index 0000000..c8b00b6 --- /dev/null +++ "b/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.js" @@ -0,0 +1,8 @@ +const solution = clothes => { + const clothesObject = clothes.reduce((acc, [name, kind]) => { + acc.hasOwnProperty(kind)? acc[kind] += 1 : acc[kind] = 1; + return acc; + }, new Object()); + + return Object.values(clothesObject).reduce((acc, val) => acc *= val + 1, 1) - 1; +} \ No newline at end of file From 4dda60932d233a1f84571b9dfda2670b155f1566 Mon Sep 17 00:00:00 2001 From: Do-ho Date: Wed, 6 Jan 2021 18:52:37 +0900 Subject: [PATCH 44/49] =?UTF-8?q?solve:=20programmers=20=EB=84=A4=ED=8A=B8?= =?UTF-8?q?=EC=9B=8C=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dfs를 통한 풀이 --- ...44\355\212\270\354\233\214\355\201\254.js" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "src/Do-ho/dfsbfs/pgs_\353\204\244\355\212\270\354\233\214\355\201\254/pgs_\353\204\244\355\212\270\354\233\214\355\201\254.js" diff --git "a/src/Do-ho/dfsbfs/pgs_\353\204\244\355\212\270\354\233\214\355\201\254/pgs_\353\204\244\355\212\270\354\233\214\355\201\254.js" "b/src/Do-ho/dfsbfs/pgs_\353\204\244\355\212\270\354\233\214\355\201\254/pgs_\353\204\244\355\212\270\354\233\214\355\201\254.js" new file mode 100644 index 0000000..9a04453 --- /dev/null +++ "b/src/Do-ho/dfsbfs/pgs_\353\204\244\355\212\270\354\233\214\355\201\254/pgs_\353\204\244\355\212\270\354\233\214\355\201\254.js" @@ -0,0 +1,26 @@ +const solution = (n, computers) => { + let answer = 0; + let visited = new Array(n).fill(false); + let queue = []; + const loopArray = [... new Array(n).keys()]; + const isEmpty = () => queue.length !== 0; + + const dfs = () => { + const targetIdx = queue.pop(); + const target = computers[targetIdx] + loopArray.forEach((idx) => { + if(visited[idx] || target[idx] === 0) return; + queue.push(idx); + visited[idx] = true; + }); + } + + loopArray.forEach((computerID) => { + if(visited[computerID]) return; + queue.push(computerID); + while(isEmpty()) dfs(); + answer++; + }) + + return answer; +} \ No newline at end of file From 448f895d96b9d3af41583d15d0a5ccc3c6ee048d Mon Sep 17 00:00:00 2001 From: Do-ho Date: Wed, 6 Jan 2021 18:52:48 +0900 Subject: [PATCH 45/49] =?UTF-8?q?solve:=20programmers=20=EC=98=81=EC=96=B4?= =?UTF-8?q?=EB=81=9D=EB=A7=90=EC=9E=87=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 단순 구현 문제 --- ...35\353\247\220\354\236\207\352\270\260.js" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "src/Do-ho/implementation/pgs_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260/pgs_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.js" diff --git "a/src/Do-ho/implementation/pgs_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260/pgs_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.js" "b/src/Do-ho/implementation/pgs_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260/pgs_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.js" new file mode 100644 index 0000000..3383aab --- /dev/null +++ "b/src/Do-ho/implementation/pgs_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260/pgs_\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.js" @@ -0,0 +1,21 @@ +const solution = (n, words) => { + let [people, order] = [0, 0]; + let prevText = null; + let wordSet = []; + const isNotPrevTextNull = () => prevText !== null; + const isNotMatchWord = (word) => prevText[prevText.length - 1] !== word[0]; + const isContainWordSet = (word) => wordSet.includes(word); + + for (let i=0; i Date: Wed, 6 Jan 2021 18:55:33 +0900 Subject: [PATCH 46/49] =?UTF-8?q?docs:=20PR=20Template=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/PULL_REQUEST_TEMPLATE.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..722558e --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +## 📚 문제 +- 문제 1 +- 문제 2 +- 문제 3 +- 문제 4 + +## 📋 하고 싶은 말 +- 하고 싶은 말 1 \ No newline at end of file From 144e43fd5ed088df53e9f7d64dcfcbd9228b0961 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Wed, 6 Jan 2021 20:39:33 +0900 Subject: [PATCH 47/49] =?UTF-8?q?15=ED=9A=8C=EC=B0=A8=20readme=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 --- src/grap3fruit/js/programmers/12981.js | 34 +++++++++++++++ src/grap3fruit/js/programmers/12981.md | 11 +++++ src/grap3fruit/js/programmers/42578.js | 26 ++++++++++++ src/grap3fruit/js/programmers/42578.md | 9 ++++ src/grap3fruit/js/programmers/42578_2.js | 29 +++++++++++++ src/grap3fruit/js/programmers/43162.js | 54 ++++++++++++++++++++++++ src/grap3fruit/js/programmers/43162.md | 11 +++++ 7 files changed, 174 insertions(+) create mode 100644 src/grap3fruit/js/programmers/12981.js create mode 100644 src/grap3fruit/js/programmers/12981.md create mode 100644 src/grap3fruit/js/programmers/42578.js create mode 100644 src/grap3fruit/js/programmers/42578.md create mode 100644 src/grap3fruit/js/programmers/42578_2.js create mode 100644 src/grap3fruit/js/programmers/43162.js create mode 100644 src/grap3fruit/js/programmers/43162.md diff --git a/src/grap3fruit/js/programmers/12981.js b/src/grap3fruit/js/programmers/12981.js new file mode 100644 index 0000000..3a35eb8 --- /dev/null +++ b/src/grap3fruit/js/programmers/12981.js @@ -0,0 +1,34 @@ +const check = (words, n, word, idx, visited) => { + if (visited.includes(word)) { + return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; + } + if (idx > 0) { + if (words[idx - 1][words[idx - 1].length - 1] !== word[0]) { + return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; + } + } + return null; +}; + +function solution(n, words) { + let answer = null; + const visited = []; + + words.forEach((word, idx) => { + if (!answer) { + answer = check(words, n, word, idx, visited); + visited.push(word); + } + }); + if (!answer) { + answer = [0, 0]; + } + return answer; +} + +const n = 2; +const words = ['hello', 'two']; +// const words = ['hello', 'one', 'even', 'never', 'now', 'world', 'draw']; +// const words = ['tank', 'kick', 'know', 'wheel', 'land', 'dream', 'mother', 'robot', 'tank']; + +solution(n, words); diff --git a/src/grap3fruit/js/programmers/12981.md b/src/grap3fruit/js/programmers/12981.md new file mode 100644 index 0000000..a7d413a --- /dev/null +++ b/src/grap3fruit/js/programmers/12981.md @@ -0,0 +1,11 @@ +# 12981 영어 끝말잇기 - 성공 + +## 아이디어 구현 + +단순 구현 문제 + +words를 돌면서 조건에 맞는것 리턴 해주면 됨. + +[번호, 차례]를 잘 출력하는게 까다로웠음. + +차례는 항상 올림으로 해주면 맞게 된다. diff --git a/src/grap3fruit/js/programmers/42578.js b/src/grap3fruit/js/programmers/42578.js new file mode 100644 index 0000000..3ec1378 --- /dev/null +++ b/src/grap3fruit/js/programmers/42578.js @@ -0,0 +1,26 @@ +function solution(clothes) { + let answer = 1; + const data = {}; + + clothes.forEach((cloth) => { + if (!data[cloth[1]]) { + return (data[cloth[1]] = [cloth[0]]); + } + data[cloth[1]].push(cloth[0]); + }); + + for (const el in data) { + answer *= data[el].length + 1; + } + answer -= 1; + + return answer; +} + +const clothes = [ + ['yellow_hat', 'headgear'], + ['blue_sunglasses', 'eyewear'], + ['green_turban', 'headgear'], +]; + +console.log(solution(clothes)); diff --git a/src/grap3fruit/js/programmers/42578.md b/src/grap3fruit/js/programmers/42578.md new file mode 100644 index 0000000..18702d0 --- /dev/null +++ b/src/grap3fruit/js/programmers/42578.md @@ -0,0 +1,9 @@ +# 42578 위장 - 성공 + +## 아이디어 구현 + +이 문제가 왜 해시인가? 딕셔너리 아닌가? 했더니 + +해시맵 === 딕셔너리 네요. 같은 자료구조인데 여러가지로 불리는. + +[키기반의 컬렉션](https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Keyed_collections#Maps) 참고해서, map 써서도 구현해봤습니다 diff --git a/src/grap3fruit/js/programmers/42578_2.js b/src/grap3fruit/js/programmers/42578_2.js new file mode 100644 index 0000000..f7b369c --- /dev/null +++ b/src/grap3fruit/js/programmers/42578_2.js @@ -0,0 +1,29 @@ +function solution(clothes) { + let answer = 1; + console.log(clothes); + + const map = new Map(); + + clothes.forEach((cloth) => { + if (!map.get(cloth[1])) { + return map.set(cloth[1], [cloth[0]]); + } + + map.get(cloth[1]).push(cloth[0]); + }); + + for (let key of map.keys()) { + answer *= map.get(key).length + 1; + } + answer -= 1; + + return answer; +} + +const clothes = [ + ['yellow_hat', 'headgear'], + ['blue_sunglasses', 'eyewear'], + ['green_turban', 'headgear'], +]; + +console.log(solution(clothes)); diff --git a/src/grap3fruit/js/programmers/43162.js b/src/grap3fruit/js/programmers/43162.js new file mode 100644 index 0000000..bcd9b98 --- /dev/null +++ b/src/grap3fruit/js/programmers/43162.js @@ -0,0 +1,54 @@ +const bfs = (computers, root) => { + const visited = [root]; + let q = [computers[root]]; + + while (q.length > 0) { + let item = q.shift(); + + item.forEach((el, idx) => { + if (el === 1 && !visited.includes(idx)) { + q.push(computers[idx]); + visited.push(idx); + } + }); + } + + return visited; +}; + +function solution(n, computers) { + let answer = 0; + const visited = []; + + computers.forEach((_, idx) => { + let visitFlag = false; + visited.forEach((el) => { + if (el.includes(idx)) { + visitFlag = true; + } + }); + + if (!visitFlag) { + const newVisited = bfs(computers, idx); + visited.push(newVisited); + } + }); + + console.log(visited.length); + answer = visited.length; + return answer; +} + +const n = 3; +const computers = [ + [1, 1, 0], + [1, 1, 0], + [0, 0, 1], +]; +// const computers = [ +// [1, 1, 0], +// [1, 1, 1], +// [0, 1, 1], +// ]; + +solution(n, computers); diff --git a/src/grap3fruit/js/programmers/43162.md b/src/grap3fruit/js/programmers/43162.md new file mode 100644 index 0000000..107a9be --- /dev/null +++ b/src/grap3fruit/js/programmers/43162.md @@ -0,0 +1,11 @@ +# 43162 네트워크 - 성공 + +## BFS + +bfs에서 최단거리를 구할 필요는 없고, 지나간 모든 경로를 visited에 담아서 반환하면 이걸 하나의 네트워크라고 생각한다. + +각각의 컴퓨터가 root일때 네트워크를 구하고 겹치지 않는 네트워크의 개수를 구해주면 된다. + +겹치지 않도록 하기위해 bfs로 root를 넣기 전, network를 모두 체크해서 겹치는 root가 있으면 같은 네트워크가 이미 있다는 것이므로 pass 했다. + +위 조건에 따른 모든 network를 구한 후 개수를 세면 끝. From e00c6912882488de8787aa3fbcf91295161a2fae Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Wed, 6 Jan 2021 20:40:12 +0900 Subject: [PATCH 48/49] =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=9E=98=EB=AA=BB?= =?UTF-8?q?=20=EB=84=A3=EC=9D=80=EA=B2=83=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/js/goorm/12981.js | 34 ------------------- src/grap3fruit/js/goorm/42578.js | 26 -------------- src/grap3fruit/js/goorm/42578_2.js | 29 ---------------- src/grap3fruit/js/goorm/43162.js | 54 ------------------------------ 4 files changed, 143 deletions(-) delete mode 100644 src/grap3fruit/js/goorm/12981.js delete mode 100644 src/grap3fruit/js/goorm/42578.js delete mode 100644 src/grap3fruit/js/goorm/42578_2.js delete mode 100644 src/grap3fruit/js/goorm/43162.js diff --git a/src/grap3fruit/js/goorm/12981.js b/src/grap3fruit/js/goorm/12981.js deleted file mode 100644 index 3a35eb8..0000000 --- a/src/grap3fruit/js/goorm/12981.js +++ /dev/null @@ -1,34 +0,0 @@ -const check = (words, n, word, idx, visited) => { - if (visited.includes(word)) { - return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; - } - if (idx > 0) { - if (words[idx - 1][words[idx - 1].length - 1] !== word[0]) { - return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; - } - } - return null; -}; - -function solution(n, words) { - let answer = null; - const visited = []; - - words.forEach((word, idx) => { - if (!answer) { - answer = check(words, n, word, idx, visited); - visited.push(word); - } - }); - if (!answer) { - answer = [0, 0]; - } - return answer; -} - -const n = 2; -const words = ['hello', 'two']; -// const words = ['hello', 'one', 'even', 'never', 'now', 'world', 'draw']; -// const words = ['tank', 'kick', 'know', 'wheel', 'land', 'dream', 'mother', 'robot', 'tank']; - -solution(n, words); diff --git a/src/grap3fruit/js/goorm/42578.js b/src/grap3fruit/js/goorm/42578.js deleted file mode 100644 index 3ec1378..0000000 --- a/src/grap3fruit/js/goorm/42578.js +++ /dev/null @@ -1,26 +0,0 @@ -function solution(clothes) { - let answer = 1; - const data = {}; - - clothes.forEach((cloth) => { - if (!data[cloth[1]]) { - return (data[cloth[1]] = [cloth[0]]); - } - data[cloth[1]].push(cloth[0]); - }); - - for (const el in data) { - answer *= data[el].length + 1; - } - answer -= 1; - - return answer; -} - -const clothes = [ - ['yellow_hat', 'headgear'], - ['blue_sunglasses', 'eyewear'], - ['green_turban', 'headgear'], -]; - -console.log(solution(clothes)); diff --git a/src/grap3fruit/js/goorm/42578_2.js b/src/grap3fruit/js/goorm/42578_2.js deleted file mode 100644 index f7b369c..0000000 --- a/src/grap3fruit/js/goorm/42578_2.js +++ /dev/null @@ -1,29 +0,0 @@ -function solution(clothes) { - let answer = 1; - console.log(clothes); - - const map = new Map(); - - clothes.forEach((cloth) => { - if (!map.get(cloth[1])) { - return map.set(cloth[1], [cloth[0]]); - } - - map.get(cloth[1]).push(cloth[0]); - }); - - for (let key of map.keys()) { - answer *= map.get(key).length + 1; - } - answer -= 1; - - return answer; -} - -const clothes = [ - ['yellow_hat', 'headgear'], - ['blue_sunglasses', 'eyewear'], - ['green_turban', 'headgear'], -]; - -console.log(solution(clothes)); diff --git a/src/grap3fruit/js/goorm/43162.js b/src/grap3fruit/js/goorm/43162.js deleted file mode 100644 index bcd9b98..0000000 --- a/src/grap3fruit/js/goorm/43162.js +++ /dev/null @@ -1,54 +0,0 @@ -const bfs = (computers, root) => { - const visited = [root]; - let q = [computers[root]]; - - while (q.length > 0) { - let item = q.shift(); - - item.forEach((el, idx) => { - if (el === 1 && !visited.includes(idx)) { - q.push(computers[idx]); - visited.push(idx); - } - }); - } - - return visited; -}; - -function solution(n, computers) { - let answer = 0; - const visited = []; - - computers.forEach((_, idx) => { - let visitFlag = false; - visited.forEach((el) => { - if (el.includes(idx)) { - visitFlag = true; - } - }); - - if (!visitFlag) { - const newVisited = bfs(computers, idx); - visited.push(newVisited); - } - }); - - console.log(visited.length); - answer = visited.length; - return answer; -} - -const n = 3; -const computers = [ - [1, 1, 0], - [1, 1, 0], - [0, 0, 1], -]; -// const computers = [ -// [1, 1, 0], -// [1, 1, 1], -// [0, 1, 1], -// ]; - -solution(n, computers); From f13aa2c33a839e5fd01bdcce1cf684e8e54dc0e0 Mon Sep 17 00:00:00 2001 From: grap3fruit Date: Wed, 6 Jan 2021 21:49:34 +0900 Subject: [PATCH 49/49] =?UTF-8?q?15=EC=A3=BC=EC=B0=A8=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grap3fruit/js/programmers/12981.js | 22 +++++++++++++--------- src/grap3fruit/js/programmers/43162.js | 7 +------ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/grap3fruit/js/programmers/12981.js b/src/grap3fruit/js/programmers/12981.js index 3a35eb8..57214da 100644 --- a/src/grap3fruit/js/programmers/12981.js +++ b/src/grap3fruit/js/programmers/12981.js @@ -1,10 +1,14 @@ -const check = (words, n, word, idx, visited) => { - if (visited.includes(word)) { - return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; +const getResult = (idx, n) => { + return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; +}; + +const check = (lastWord, n, word, idx, visited) => { + if (visited.get(word)) { + return getResult(idx, n); } if (idx > 0) { - if (words[idx - 1][words[idx - 1].length - 1] !== word[0]) { - return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; + if (lastWord[lastWord.length - 1] !== word[0]) { + return getResult(idx, n); } } return null; @@ -12,12 +16,12 @@ const check = (words, n, word, idx, visited) => { function solution(n, words) { let answer = null; - const visited = []; + const visited = new Map(); words.forEach((word, idx) => { if (!answer) { - answer = check(words, n, word, idx, visited); - visited.push(word); + answer = check(words[idx - 1], n, word, idx, visited); + visited.set(word, true); } }); if (!answer) { @@ -31,4 +35,4 @@ const words = ['hello', 'two']; // const words = ['hello', 'one', 'even', 'never', 'now', 'world', 'draw']; // const words = ['tank', 'kick', 'know', 'wheel', 'land', 'dream', 'mother', 'robot', 'tank']; -solution(n, words); +console.log(solution(n, words)); diff --git a/src/grap3fruit/js/programmers/43162.js b/src/grap3fruit/js/programmers/43162.js index bcd9b98..0affc25 100644 --- a/src/grap3fruit/js/programmers/43162.js +++ b/src/grap3fruit/js/programmers/43162.js @@ -21,12 +21,7 @@ function solution(n, computers) { const visited = []; computers.forEach((_, idx) => { - let visitFlag = false; - visited.forEach((el) => { - if (el.includes(idx)) { - visitFlag = true; - } - }); + const visitFlag = visited.some((el) => el.includes(idx)); if (!visitFlag) { const newVisited = bfs(computers, idx);