From 81896657e15cbcff7d85740da9abc32f4e47b8e6 Mon Sep 17 00:00:00 2001 From: sena Date: Tue, 28 Mar 2023 14:00:28 +0900 Subject: [PATCH 01/27] =?UTF-8?q?[BOJ]=20=EC=98=88=EC=82=B0=20/=20?= =?UTF-8?q?=EC=8B=A4=EB=B2=843=20/=201=EC=8B=9C=EA=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "hyunjung/week16/\354\230\210\354\202\260.js" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "hyunjung/week16/\354\230\210\354\202\260.js" diff --git "a/hyunjung/week16/\354\230\210\354\202\260.js" "b/hyunjung/week16/\354\230\210\354\202\260.js" new file mode 100644 index 0000000..a66361b --- /dev/null +++ "b/hyunjung/week16/\354\230\210\354\202\260.js" @@ -0,0 +1,31 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") + +let [n, arr, budget] = [+input[0], input[1].split(" ").map(Number), +input[2]] + +const solution = (n, arr, budget) => { + arr = arr.sort((a, b) => a - b) + + let start = 0 + let end = arr.at(-1) + + while (start <= end) { + let mid = parseInt((start + end) / 2) + let sum = 0 + for (let i = 0; i < n; i++) { + if (arr[i] > mid) { + //요청금액 > 상한액 + sum += mid //상한액 더하기 + } else { + //요청금액 < 상한액 + sum += arr[i] //요청금액 더하기 + } + } + sum <= budget ? (start = mid + 1) : (end = mid - 1) //총액이 예산보다 작으면 최소금액 증가, 크면 최소금액 감소 + } + return end +} + +const answer = solution(n, arr, budget) +console.log(answer) From 20ee6e05517626c310748f2fcf6fc0f27bc50eea Mon Sep 17 00:00:00 2001 From: sena Date: Wed, 29 Mar 2023 18:58:33 +0900 Subject: [PATCH 02/27] =?UTF-8?q?[BOJ]=20=EB=82=98=EB=AC=B4=EC=9E=90?= =?UTF-8?q?=EB=A5=B4=EA=B8=B0=20/=20=EC=8B=A4=EB=B2=842=20/=20=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...64\354\236\220\353\245\264\352\270\260.js" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "hyunjung/week16/\353\202\230\353\254\264\354\236\220\353\245\264\352\270\260.js" diff --git "a/hyunjung/week16/\353\202\230\353\254\264\354\236\220\353\245\264\352\270\260.js" "b/hyunjung/week16/\353\202\230\353\254\264\354\236\220\353\245\264\352\270\260.js" new file mode 100644 index 0000000..d6a1260 --- /dev/null +++ "b/hyunjung/week16/\353\202\230\353\254\264\354\236\220\353\245\264\352\270\260.js" @@ -0,0 +1,34 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") + +const [n, m] = input[0].split(" ").map(Number) +const arr = input[1].split(" ").map(Number) + +function solution(n, m, trees) { + arr.sort((a, b) => a - b) + let height = 0 + start = 0 + end = Math.max(...trees) + + for (let i = 0; i < n; i++) { + while (start <= end) { + let mid = Math.floor((start + end) / 2) + let woodSum = 0 + trees.forEach((tree) => { + let wood = tree - mid + if (wood > 0) woodSum += wood + }) + if (woodSum >= m) { + if (mid > height) height = mid + start = mid + 1 + } else { + end = mid - 1 + } + } + } + return height +} +//제출 +const answer = solution(n, m, arr) +console.log(answer) From 6d1d91116e9762fd5523de1e9812ed9ea26f1b97 Mon Sep 17 00:00:00 2001 From: sena Date: Wed, 29 Mar 2023 20:56:46 +0900 Subject: [PATCH 03/27] =?UTF-8?q?[BOJ]=20=EC=9A=A9=EB=8F=88=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20/=20=EC=8B=A4=EB=B2=842=20/=201=EC=8B=9C=EA=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...51\353\217\210\352\264\200\353\246\254.js" | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 "hyunjung/week16/\354\232\251\353\217\210\352\264\200\353\246\254.js" diff --git "a/hyunjung/week16/\354\232\251\353\217\210\352\264\200\353\246\254.js" "b/hyunjung/week16/\354\232\251\353\217\210\352\264\200\353\246\254.js" new file mode 100644 index 0000000..7684762 --- /dev/null +++ "b/hyunjung/week16/\354\232\251\353\217\210\352\264\200\353\246\254.js" @@ -0,0 +1,54 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") + +let [n, m] = input[0].split(" ") +const arr = input.slice(1).map(Number) + +n = +n +m = +m + +const solution = (days, withdrawal, A) => { + let start = Math.min(...A) + let end = A.reduce((a, c) => a + c, 0) + let K = Infinity + + while (start <= end) { + let min = 0 + let mid = Math.floor((start + end) / 2) + let sum = mid + let cnt = 0 + + for (let i = 0; i < days; i++) { + if (sum - A[i] >= 0) { + sum -= A[i] + } else { + cnt++ + sum = mid - A[i] + if (sum < 0) { + min = A[i] + break + } + } + } + if (min > 0) { + start = min + continue + } + + if (sum < mid) cnt++ + if (cnt <= withdrawal) { + if (K > mid) { + K = mid + } + end = mid - 1 + } else { + start = mid + 1 + } + } + return K +} + +// 제출 +const answer = solution(n, m, arr) +console.log(answer) From f44974aea7d406e234f35a0a28b61b2c19a512ef Mon Sep 17 00:00:00 2001 From: sena Date: Thu, 6 Apr 2023 00:57:23 +0900 Subject: [PATCH 04/27] =?UTF-8?q?[BOJ]=20=EC=97=B0=EA=B2=B0=EC=9A=94?= =?UTF-8?q?=EC=86=8C=EC=9D=98=20=EA=B0=9C=EC=88=98=20/=20=EC=8B=A4?= =?UTF-8?q?=EB=B2=842?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...14\354\235\230\352\260\234\354\210\230.js" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "hyunjung/week17/\354\227\260\352\262\260\354\232\224\354\206\214\354\235\230\352\260\234\354\210\230.js" diff --git "a/hyunjung/week17/\354\227\260\352\262\260\354\232\224\354\206\214\354\235\230\352\260\234\354\210\230.js" "b/hyunjung/week17/\354\227\260\352\262\260\354\232\224\354\206\214\354\235\230\352\260\234\354\210\230.js" new file mode 100644 index 0000000..8672140 --- /dev/null +++ "b/hyunjung/week17/\354\227\260\352\262\260\354\232\224\354\206\214\354\235\230\352\260\234\354\210\230.js" @@ -0,0 +1,46 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +const [n, m] = input[0].split(" ").map(Number) + +const solution = (n, m, input) => { + let A = [] + let cnt = 0 + let visited = new Array(n + 1).fill(false) + + for (let i = 1; i < n + 1; i++) { + A[i] = [] + } + + //A 인접 리스트에 그래프 데이터 저장하기 + for (let i = 0; i < m; i++) { + let [from, to] = input[i + 1].split(" ").map(Number) + A[from].push(to) + A[to].push(from) + } + + const DFS = (start) => { + if (visited[start]) return + visited[start] = true //방문처리 + + for (let i = 0; i < A[start].length; i++) { + const next = A[start][i] + if (!visited[next]) { + DFS(next) //방문하지 않은 노드만 탐색 + } + } + } + + for (let i = 1; i <= n; i++) { + if (!visited[i]) { + DFS(i) //방문하지 않은 노드가 있으면 dfs실행 + cnt++ //연결 요소 개수++ + } + } + + return cnt +} + +//제출 +const answer = solution(n, m, input) +console.log(answer) From 285637c75cf10a54be6669777f2bc27b267f4cde Mon Sep 17 00:00:00 2001 From: sena Date: Thu, 6 Apr 2023 00:58:55 +0900 Subject: [PATCH 05/27] =?UTF-8?q?[BOJ]=20=EC=9C=A0=EA=B8=B0=EB=86=8D=20?= =?UTF-8?q?=EB=B0=B0=EC=B6=94=20/=20=EC=8B=A4=EB=B2=842?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...60\353\206\215\353\260\260\354\266\224.js" | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 "hyunjung/week17/\354\234\240\352\270\260\353\206\215\353\260\260\354\266\224.js" diff --git "a/hyunjung/week17/\354\234\240\352\270\260\353\206\215\353\260\260\354\266\224.js" "b/hyunjung/week17/\354\234\240\352\270\260\353\206\215\353\260\260\354\266\224.js" new file mode 100644 index 0000000..37f6983 --- /dev/null +++ "b/hyunjung/week17/\354\234\240\352\270\260\353\206\215\353\260\260\354\266\224.js" @@ -0,0 +1,71 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" + +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +let n = input[0] +n = +n +let line = 1 +let meta = [] +let map = [] + +for (let i = 0; i < n; i++) { + let [M, N, K] = input[line].split(" ").map(Number) + let bug = input.slice(line + 1, line + 1 + K).map((el) => el.split(" ")) + meta.push([M, N, K]) + map.push(bug) + line += K + 1 +} + +const solution = (test, meta, map) => { + let result = [] + + for (let T = 0; T < test; T++) { + let [M, N, cabbages] = meta[T] + let bug = 0 + + //방문 목록 + const visited = [...Array(N)].map(() => Array(M).fill(0)) + + const A = [...Array(N)].map(() => Array(M).fill(0)) + + //그래프 데이터 저장하기 + for (let i = 0; i < cabbages; i++) { + let [row, col] = map[T][i].map((v) => +v) + A[col][row] = 1 + } + + const DFS = (row, col) => { + let dx = [0, 1, 0, -1] + let dy = [1, 0, -1, 0] + + visited[row][col] = 1 + + for (let i = 0; i < 4; i++) { + //현재 노드의 4면 조사 + let ax = row + dx[i], + ay = col + dy[i] + if (ax >= 0 && ay >= 0 && ax < N && ay < M) { + //범위를 벗어나지 않으면 + if (visited[ax][ay] === 0 && A[ax][ay] === 1) { + DFS(ax, ay) + } + } + } + } + + // 배추 위치 전체 탐색 + for (let row = 0; row < N; row++) { + for (let col = 0; col < M; col++) { + if (visited[row][col] === 0 && A[row][col] === 1) { + DFS(row, col) + bug++ + } + } + } + result.push(bug) + } + return result.join("\n") +} +//제출 +const answer = solution(n, meta, map) +console.log(answer) From 30bceb2d32680e67cfb0594f91e35f6c82cbda5c Mon Sep 17 00:00:00 2001 From: sena Date: Thu, 6 Apr 2023 00:59:35 +0900 Subject: [PATCH 06/27] =?UTF-8?q?[BOJ]=20=EA=B2=BD=EB=A1=9C=20=EC=B0=BE?= =?UTF-8?q?=EA=B8=B0=20/=20=EC=8B=A4=EB=B2=841?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...75\353\241\234\354\260\276\352\270\260.js" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "hyunjung/week17/\352\262\275\353\241\234\354\260\276\352\270\260.js" diff --git "a/hyunjung/week17/\352\262\275\353\241\234\354\260\276\352\270\260.js" "b/hyunjung/week17/\352\262\275\353\241\234\354\260\276\352\270\260.js" new file mode 100644 index 0000000..aac04e7 --- /dev/null +++ "b/hyunjung/week17/\352\262\275\353\241\234\354\260\276\352\270\260.js" @@ -0,0 +1,29 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +let n = input[0] +n = +n +const graph = input.slice(1).map((el) => el.split(" ").map(Number)) + +const solution = (n, graph) => { + const result = [...Array(n)].map(() => Array(n).fill(0)) // 답을 저장할 2차원 배열 + + const DFS = (edge, line, visited) => { + for (let i = 0; i < n; i++) { + if (graph[edge][i] && !visited[i]) { + visited[i] = true + result[line][i] = 1 + DFS(i, line, visited) //line은 계속 고정 + } + } + } + + for (let i = 0; i < n; i++) { + const visited = new Array(n).fill(false) + DFS(i, i, visited) + } + return result.map((v) => v.join(" ")).join("\n") +} + +const answer = solution(n, graph) +console.log(answer) From 133b1c77ae6b256c6e0431407abc2dfd79ec6bd6 Mon Sep 17 00:00:00 2001 From: sena Date: Thu, 6 Apr 2023 09:18:41 +0900 Subject: [PATCH 07/27] =?UTF-8?q?[BOJ]=20=EC=95=88=EC=A0=84=EC=98=81?= =?UTF-8?q?=EC=97=AD=20/=20=EC=8B=A4=EB=B2=841?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...10\354\240\204\354\230\201\354\227\255.js" | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "hyunjung/week17/\354\225\210\354\240\204\354\230\201\354\227\255.js" diff --git "a/hyunjung/week17/\354\225\210\354\240\204\354\230\201\354\227\255.js" "b/hyunjung/week17/\354\225\210\354\240\204\354\230\201\354\227\255.js" new file mode 100644 index 0000000..c356275 --- /dev/null +++ "b/hyunjung/week17/\354\225\210\354\240\204\354\230\201\354\227\255.js" @@ -0,0 +1,48 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +let n = input[0] +n = +n +const map = input.slice(1).map((el) => el.split(" ").map(Number)) + +const solution = (n, area) => { + let max = 0 + + const DFS = (row, col, h, visited) => { + let dx = [0, 1, 0, -1] + let dy = [1, 0, -1, 0] + + for (let i = 0; i < 4; i++) { + let ax = row + dx[i], + ay = col + dy[i] + if (ax >= 0 && ay >= 0 && ax < n && ay < n) { + if (!visited[ax][ay]) { + visited[ax][ay] = true + DFS(ax, ay, h, visited) + } + } + } + } + + for (let h = 0; h <= 100; h++) { + let cnt = 0 + const visited = [...Array(n)].map((_, x) => + [...Array(n)].map((_, y) => area[x][y] <= h) + ) + for (let row = 0; row < n; row++) { + for (let col = 0; col < n; col++) { + if (!visited[row][col]) { + visited[row][col] = true + DFS(row, col, h, visited) + cnt++ + } + } + } + max = Math.max(max, cnt) + } + + return max +} + +const answer = solution(n, map) +console.log(answer) From 810b2a28456b2529be143ece37f0bb9f3f78c41d Mon Sep 17 00:00:00 2001 From: sena Date: Thu, 6 Apr 2023 09:52:47 +0900 Subject: [PATCH 08/27] =?UTF-8?q?[BOJ]=20DOM=20/=20=EC=8B=A4=EB=B2=842?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hyunjung/week17/DOM.js | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 hyunjung/week17/DOM.js diff --git a/hyunjung/week17/DOM.js b/hyunjung/week17/DOM.js new file mode 100644 index 0000000..22cf90b --- /dev/null +++ b/hyunjung/week17/DOM.js @@ -0,0 +1,41 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +const [n, m, p] = input[0].split(" ").map(Number) +const channels = input.slice(1).map((el) => el.split(" ").map(Number)) + +const solution = (n, m, p, channels) => { + let curChannel = p + let cnt = 0 + let searched = new Array(m + 1).fill(false) + + const changeChannel = (channels, curChannel) => { + if (searched[curChannel]) { + return (cnt = -1) + } + searched[curChannel] = true + + for (let i = 0; i < channels.length; i++) { + if (channels[i][1] === curChannel) { + //현재 채널이 싫어하는 채널이면 + curChannel = channels[i][0] //좋아하는 채널로 변경 + + if (searched[curChannel]) { + // 변경한 채널이 검색한 채널이면 리턴 + return (cnt = -1) + } else { + cnt++ + return changeChannel(channels, curChannel) + } + } + } + } + + changeChannel(channels, curChannel) + + return cnt +} + +//제출 +const answer = solution(n, m, p, channels) +console.log(answer) From 841fe3e29c7f980b870687cef592461e70da6956 Mon Sep 17 00:00:00 2001 From: sena Date: Fri, 7 Apr 2023 07:17:33 +0900 Subject: [PATCH 09/27] =?UTF-8?q?[BOJ]=20DOM=20/=20=EC=8B=A4=EB=B2=84=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hyunjung/week17/DOM.js | 1 + hyunjung/week17/DOM_2.js | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 hyunjung/week17/DOM_2.js diff --git a/hyunjung/week17/DOM.js b/hyunjung/week17/DOM.js index 22cf90b..e0a6637 100644 --- a/hyunjung/week17/DOM.js +++ b/hyunjung/week17/DOM.js @@ -1,3 +1,4 @@ +//시간 초과 const fs = require("fs") const readFileSyncAddress = "/dev/stdin" const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") diff --git a/hyunjung/week17/DOM_2.js b/hyunjung/week17/DOM_2.js new file mode 100644 index 0000000..974d04d --- /dev/null +++ b/hyunjung/week17/DOM_2.js @@ -0,0 +1,37 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +const [n, m, p] = input[0].split(" ").map(Number) +const channels = input.slice(1).map((el) => el.split(" ").map(Number)) + +const solution = (n, m, first, channels) => { + let A = [] + let cnt = 0 + + let visited = [...Array(m + 1)].fill(false) + for (let i = 1; i <= m; i++) { + A[i] = [] + } + + for (let i = 0; i < n; i++) { + let [like, hate] = channels[i] + if (A[hate].length === 0) A[hate] = like + } + + const DFS = (node) => { + if (visited[node]) return -1 + visited[node] = true + for (let i = 1; i <= m; i++) { + if (A[node] === i) { + cnt++ + return DFS(i) + } + } + } + + if (DFS(first) === -1) return -1 + return cnt +} + +const answer = solution(n, m, p, channels) +console.log(answer) From e3d47a2efed05bcadc8a2cdda88a0ad2e0e312db Mon Sep 17 00:00:00 2001 From: sena Date: Wed, 12 Apr 2023 16:46:14 +0900 Subject: [PATCH 10/27] =?UTF-8?q?[BOJ]=20=EB=AF=B8=EB=A1=9C=20=ED=83=90?= =?UTF-8?q?=EC=83=89=20/=20=EC=8B=A4=EB=B2=841=20/=201=EC=8B=9C=EA=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...70\353\241\234\355\203\220\354\203\211.js" | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 "hyunjung/week18/\353\257\270\353\241\234\355\203\220\354\203\211.js" diff --git "a/hyunjung/week18/\353\257\270\353\241\234\355\203\220\354\203\211.js" "b/hyunjung/week18/\353\257\270\353\241\234\355\203\220\354\203\211.js" new file mode 100644 index 0000000..9821358 --- /dev/null +++ "b/hyunjung/week18/\353\257\270\353\241\234\355\203\220\354\203\211.js" @@ -0,0 +1,56 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") + +let [n, m] = input[0].split(" ") +n = +n +m = +m + +const map = input + .slice(1) + .map((el) => el.split("").map(Number)) + .map((el) => el) + +const solution = (n, m, map) => { + const dx = [0, 1, 0, -1] + const dy = [1, 0, -1, 0] + + const A = [...Array(map.length)].map(() => Array(map[0].length).fill(0)) + + for (let i = 0; i < map.length; i++) { + for (let j = 0; j < map[i].length; j++) { + A[i][j] = map[i][j] + } + } + + const visited = [...Array(map.length)].map(() => + Array(map[0].length).fill(false) + ) + + const BFS = (startX, startY) => { + const queue = [[startX, startY]] + visited[startX][startY] = 1 + + while (queue.length) { + const now = queue.shift() + + for (let i = 0; i < 4; i++) { + let nx = now[0] + dx[i] + let ny = now[1] + dy[i] + if (nx >= 0 && ny >= 0 && nx < map.length && ny < map[0].length) { + if (A[nx][ny] !== 0 && !visited[nx][ny]) { + visited[nx][ny] = true + A[nx][ny] = A[now[0]][now[1]] + 1 + queue.push([nx, ny]) + } + } + } + } + } + + BFS(0, 0) + return A[n - 1][m - 1] +} + +const answer = solution(n, m, map) +console.log(answer) From 22c00da3aa37f6eaafeebfbf18164c303b0b210e Mon Sep 17 00:00:00 2001 From: sena Date: Wed, 12 Apr 2023 16:46:48 +0900 Subject: [PATCH 11/27] =?UTF-8?q?[BOJ]=20=EC=9C=A0=EA=B8=B0=EB=86=8D=20?= =?UTF-8?q?=EB=B0=B0=EC=B6=94=20/=20=EC=8B=A4=EB=B2=842=20/=2040=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...60\353\206\215\353\260\260\354\266\224.js" | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 "hyunjung/week18/\354\234\240\352\270\260\353\206\215\353\260\260\354\266\224.js" diff --git "a/hyunjung/week18/\354\234\240\352\270\260\353\206\215\353\260\260\354\266\224.js" "b/hyunjung/week18/\354\234\240\352\270\260\353\206\215\353\260\260\354\266\224.js" new file mode 100644 index 0000000..d2860f2 --- /dev/null +++ "b/hyunjung/week18/\354\234\240\352\270\260\353\206\215\353\260\260\354\266\224.js" @@ -0,0 +1,76 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +let n = input[0] +n = +n +let line = 1 +let meta = [] +let map = [] + +for (let i = 0; i < n; i++) { + let [M, N, K] = input[line].split(" ").map(Number) + let bug = input.slice(line + 1, line + 1 + K).map((el) => el.split(" ")) + meta.push([M, N, K]) + map.push(bug) + line += K + 1 +} + +const solution = (test, meta, map) => { + let result = [] + + for (let T = 0; T < test; T++) { + let [M, N, cabbages] = meta[T] + let bug = 0 + + const visited = [...Array(N)].map(() => Array(M).fill(0)) + const A = [...Array(N)].map(() => Array(M).fill(0)) + + for (let i = 0; i < cabbages; i++) { + let [row, col] = map[T][i].map((v) => +v) + A[col][row] = 1 + } + const BFS = (startX, startY) => { + const queue = [[startX, startY]] + visited[startX][startY] = 1 + let dx = [0, 1, 0, -1] + let dy = [1, 0, -1, 0] + + while (queue.length > 0) { + for (let i = 0; i < queue.length; i++) { + const [x, y] = queue.shift() + if (A[x][y] === 0) continue + A[x][y] = 0 + + for (let j = 0; j < 4; j++) { + let nx = x + dx[j] + let ny = y + dy[j] + if ( + nx >= 0 && + ny >= 0 && + nx < N && + ny < M && + A[nx][ny] === 1 && + !visited[nx][ny] + ) { + queue.push([nx, ny]) + } + } + } + } + } + + for (let row = 0; row < N; row++) { + for (let col = 0; col < M; col++) { + if (visited[row][col] === 0 && A[row][col] === 1) { + BFS(row, col) + bug++ + } + } + } + result.push(bug) + } + return result.join("\n") +} + +const answer = solution(n, meta, map) +console.log(answer) From c91ed1144ee08a93605a99cd9c0ac842c0efff17 Mon Sep 17 00:00:00 2001 From: sena Date: Wed, 12 Apr 2023 16:47:31 +0900 Subject: [PATCH 12/27] =?UTF-8?q?[BOJ]=20DFS=EC=99=80=20BFS=20/=20?= =?UTF-8?q?=EC=8B=A4=EB=B2=842=20=20/=20Error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "hyunjung/week18/DFS\354\231\200BFS.js" | 82 +++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 "hyunjung/week18/DFS\354\231\200BFS.js" diff --git "a/hyunjung/week18/DFS\354\231\200BFS.js" "b/hyunjung/week18/DFS\354\231\200BFS.js" new file mode 100644 index 0000000..a1aeec0 --- /dev/null +++ "b/hyunjung/week18/DFS\354\231\200BFS.js" @@ -0,0 +1,82 @@ +// 런타임 에러 (TypeError) +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +const [n, m, v] = input[0].split(" ").map(Number) +const graph = input.slice(1).map((el) => el.split(" ").map(Number)) + +const solution = (n, m, v, graph) => { + // n: 노드 개수, m: 에지 개수, v: 시작점 + + let result = [] + + //그래프를 저장할 인접 리스트 + let A = [] + //인접 리스트 초기화 + for (let i = 1; i <= n; i++) { + A[i] = [] + } + //인접 리스트에 그래프 저장하기(m 개수만큼) + for (let i = 0; i < m; i++) { + let [start, end] = graph[i] + A[start].push(end) + A[end].push(start) + } + + //오름차순 정렬 + for (let i = 1; i <= m; i++) { + A[i].sort((a, b) => a - b) + } + + //방문 배열 초기화 + let visited = new Array(m + 1).fill(false) + let curResult = [] + + const DFS = (node) => { + if (visited[node]) return + //방문 노드를 배열에 추가 + curResult.push(node) + visited[node] = true + + for (let i = 0; i < A[node].length; i++) { + let next = A[node][i] + if (!visited[next]) { + DFS(next) + } + } + } + + DFS(v) + result.push(curResult) + + //visited 초기화 + visited = new Array(m + 1).fill(false) + curResult = [] + + const BFS = (node) => { + let Q = [] + Q.push(node) + visited[node] = true + + while (Q.length > 0) { + cur_node = Q.shift() + curResult.push(cur_node) + + for (let i = 0; i < A[cur_node].length; i++) { + let next = A[cur_node][i] + if (!visited[next]) { + visited[next] = true + Q.push(next) + } + } + } + } + BFS(v) + result.push(curResult) + + return result.map((v) => v.join(" ")).join("\n") +} + +//제출 +const answer = solution(n, m, v, graph) +console.log(answer) From a0e615eced308e84516cee7f1eff1dfb8d1dd9e3 Mon Sep 17 00:00:00 2001 From: sena-22 Date: Fri, 21 Apr 2023 15:10:17 +0900 Subject: [PATCH 13/27] =?UTF-8?q?[BOJ]=20=EB=8F=8C=EA=B2=8C=EC=9E=84/=20?= =?UTF-8?q?=EC=8B=A4=EB=B2=845=20/=2040=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\353\217\214\352\262\214\354\236\204.js" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "hyunjung/week19/\353\217\214\352\262\214\354\236\204.js" diff --git "a/hyunjung/week19/\353\217\214\352\262\214\354\236\204.js" "b/hyunjung/week19/\353\217\214\352\262\214\354\236\204.js" new file mode 100644 index 0000000..74fd350 --- /dev/null +++ "b/hyunjung/week19/\353\217\214\352\262\214\354\236\204.js" @@ -0,0 +1,15 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs + .readFileSync(readFileSyncAddress) + .toString() + .trim() + .split("\n") + .map(Number) + +const solution = (stone) => { + return stone % 2 === 0 ? "CY" : "SK" +} + +const answer = solution(input) +console.log(answer) From 351fa85be61ff75f6f3cc9cf362d163016a48d4a Mon Sep 17 00:00:00 2001 From: sena-22 Date: Fri, 21 Apr 2023 15:10:35 +0900 Subject: [PATCH 14/27] =?UTF-8?q?[BOJ]=201=EB=A1=9C=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EA=B8=B0=20/=20=EC=8B=A4=EB=B2=843=20/=2040=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...34\353\247\214\353\223\244\352\270\260.js" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "hyunjung/week19/1\353\241\234\353\247\214\353\223\244\352\270\260.js" diff --git "a/hyunjung/week19/1\353\241\234\353\247\214\353\223\244\352\270\260.js" "b/hyunjung/week19/1\353\241\234\353\247\214\353\223\244\352\270\260.js" new file mode 100644 index 0000000..306472c --- /dev/null +++ "b/hyunjung/week19/1\353\241\234\353\247\214\353\223\244\352\270\260.js" @@ -0,0 +1,23 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" + +const input = fs + .readFileSync(readFileSyncAddress) + .toString() + .trim() + .split("\n") + .map(Number) + +const solution = (n) => { + let A = new Array(n + 1).fill(0) + + for (let i = 2; i <= n; i++) { + A[i] = A[i - 1] + 1 + if (i % 2 === 0) A[i] = Math.min(A[i], A[i / 2] + 1) + if (i % 3 === 0) A[i] = Math.min(A[i], A[i / 3] + 1) + } + return A[n] +} + +const answer = solution(input[0]) +console.log(answer) From 3a76470d2dae3e437ff643b31c859d0c12bda3cd Mon Sep 17 00:00:00 2001 From: sena-22 Date: Fri, 21 Apr 2023 15:10:51 +0900 Subject: [PATCH 15/27] =?UTF-8?q?[BOJ]=20=EC=9D=B4=EC=B9=9C=EC=88=98=20/?= =?UTF-8?q?=20=EC=8B=A4=EB=B2=843=20/=2080=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\235\264\354\271\234\354\210\230.js" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "hyunjung/week19/\354\235\264\354\271\234\354\210\230.js" diff --git "a/hyunjung/week19/\354\235\264\354\271\234\354\210\230.js" "b/hyunjung/week19/\354\235\264\354\271\234\354\210\230.js" new file mode 100644 index 0000000..8476e54 --- /dev/null +++ "b/hyunjung/week19/\354\235\264\354\271\234\354\210\230.js" @@ -0,0 +1,21 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs + .readFileSync(readFileSyncAddress) + .toString() + .trim() + .split("\n") + .map(Number) + +const solution = (n) => { + const A = new Array(n + 1).fill(BigInt(0)) + A[1] = BigInt(1) + + for (let i = 2; i <= n; i++) { + A[i] = A[i - 1] + A[i - 2] + } + return A[n].toString() +} + +const answer = solution(input[0]) +console.log(answer) From e1dd991d337509147e081f90e7c18619bb2a306b Mon Sep 17 00:00:00 2001 From: sena-22 Date: Thu, 27 Apr 2023 11:03:32 +0900 Subject: [PATCH 16/27] =?UTF-8?q?[BOJ]=20=EC=B4=8C=EC=88=98=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20/=20=EC=8B=A4=EB=B2=842=20/=201=EC=8B=9C=EA=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...14\354\210\230\352\263\204\354\202\260.js" | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 "hyunjung/week18/\354\264\214\354\210\230\352\263\204\354\202\260.js" diff --git "a/hyunjung/week18/\354\264\214\354\210\230\352\263\204\354\202\260.js" "b/hyunjung/week18/\354\264\214\354\210\230\352\263\204\354\202\260.js" new file mode 100644 index 0000000..d53e722 --- /dev/null +++ "b/hyunjung/week18/\354\264\214\354\210\230\352\263\204\354\202\260.js" @@ -0,0 +1,53 @@ +const fs = require("fs") +// const readFileSyncAddress = "/dev/stdin"; +const readFileSyncAddress = "예제.txt" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") + +let people = input[0] + +let [n, m] = input[1].split(" ") +const arr = input.slice(3).map((el) => el.split(" ").map(Number)) +people = +people +n = +n +m = +m + +const solution = (people, start, target, arr) => { + const graph = Array.from({length: people + 1}).map(() => []) + const visited = Array.from({length: people + 1}).map(() => false) + + for (let i = 0; i < arr.length; i++) { + const [x, y] = arr[i] + graph[x].push(y) + graph[y].push(x) + } + + //graph : [[], [2, 3], [1, 7, 8, 9], [1], [5, 6], [4], [4], [2], [2], [2]] + + const BFS = (start) => { + const queue = [[start, 0]] + + while (queue.length) { + let [person, cnt] = queue.shift() + let nearRelation = graph[person] //1촌 + if (!visited[person]) { + if (person === target) return cnt + visited[person] = true + } + + //1촌 순회 + for (let i = 0; i < nearRelation.length; i++) { + let person = nearRelation[i] + if (visited[person]) continue + if (person === target) return cnt + 1 + queue.push([person, cnt + 1]) + } + } + return -1 + } + + return BFS(start) +} + +// 제출 +const answer = solution(people, n, m, arr) +console.log(answer) From 603462ea332c0bf198a4dd971782e9c427c8eb5e Mon Sep 17 00:00:00 2001 From: sena-22 Date: Tue, 2 May 2023 10:49:43 +0900 Subject: [PATCH 17/27] =?UTF-8?q?[BOJ]=2001=ED=83=80=EC=9D=BC=20/=20?= =?UTF-8?q?=EC=8B=A4=EB=B2=843=20/=2040=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../week19/01\355\203\200\354\235\274.js" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "hyunjung/week19/01\355\203\200\354\235\274.js" diff --git "a/hyunjung/week19/01\355\203\200\354\235\274.js" "b/hyunjung/week19/01\355\203\200\354\235\274.js" new file mode 100644 index 0000000..2e00671 --- /dev/null +++ "b/hyunjung/week19/01\355\203\200\354\235\274.js" @@ -0,0 +1,22 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +const [N] = input.map(Number) + +function solution(N) { + const DP = new Array(1000001).fill(-1) + + DP[0] = 0 + DP[1] = 1 + DP[2] = 2 + + for (let i = 3; i <= N; i++) { + DP[i] = (DP[i - 1] + DP[i - 2]) % 15746 + DP[i] %= 15746 //시간 280ms -> 196ms + } + // console.log(DP) //[0, 1, 2, 3, 5,..] + return DP[N] +} +//제출 +const answer = solution(N) +console.log(answer) From 95ecb290c05c972c75003987e0a6392393b285fe Mon Sep 17 00:00:00 2001 From: sena-22 Date: Tue, 2 May 2023 11:19:40 +0900 Subject: [PATCH 18/27] =?UTF-8?q?[BOJ]=202xn=20=ED=83=80=EC=9D=BC=EB=A7=81?= =?UTF-8?q?=20/=20=EC=8B=A4=EB=B2=84=203=20/=2020=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...xn\355\203\200\354\235\274\353\247\201.js" | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 "hyunjung/week19/2xn\355\203\200\354\235\274\353\247\201.js" diff --git "a/hyunjung/week19/2xn\355\203\200\354\235\274\353\247\201.js" "b/hyunjung/week19/2xn\355\203\200\354\235\274\353\247\201.js" new file mode 100644 index 0000000..c1f00e3 --- /dev/null +++ "b/hyunjung/week19/2xn\355\203\200\354\235\274\353\247\201.js" @@ -0,0 +1,20 @@ +const fs = require("fs") +const readFileSyncAddress = "/dev/stdin" +const input = fs.readFileSync(readFileSyncAddress).toString().trim().split("\n") +const [N] = input.map(Number) + +function solution(N) { + const DP = new Array(1001).fill(-1) + + DP[1] = 1 + DP[2] = 2 + + for (let i = 3; i <= N; i++) { + DP[i] = (DP[i - 1] + DP[i - 2]) % 10007 + DP[i] %= 10007 + } + return DP[N] +} + +const answer = solution(N) +console.log(answer) From 6e7d52bb5c535ebf4230959d85ae6208496032aa Mon Sep 17 00:00:00 2001 From: sena-22 Date: Thu, 11 May 2023 00:25:40 +0900 Subject: [PATCH 19/27] =?UTF-8?q?[BOJ]=20=EC=82=AC=ED=83=95=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20/=20=EC=8B=A4=EB=B2=843=20/=2080=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\355\203\225\352\262\214\354\236\204.js" | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 "hyunjung/week20/\354\202\254\355\203\225\352\262\214\354\236\204.js" diff --git "a/hyunjung/week20/\354\202\254\355\203\225\352\262\214\354\236\204.js" "b/hyunjung/week20/\354\202\254\355\203\225\352\262\214\354\236\204.js" new file mode 100644 index 0000000..111eda0 --- /dev/null +++ "b/hyunjung/week20/\354\202\254\355\203\225\352\262\214\354\236\204.js" @@ -0,0 +1,87 @@ +const input = require("fs") + .readFileSync("/dev/stdin") + .toString() + .trim() + .split("\n") + +let [n, ...candies] = input +n = +n +candies = candies.map((el) => el.split("")) + +function solution(n, candyMap) { + let maxCandies = 1 + const visited = [...Array(n)].map(() => Array(n).fill(false)) + + const dx = [0, 0, 1, -1] + const dy = [1, -1, 0, 0] + + const getMaxCandies = () => { + let count = 0 + let res = 0 + let pre = "" + for (let i = 0; i < n; i++) { + //행 검사 + count = 1 + pre = candyMap[0][i] + for (let j = 1; j < n; j++) { + if (pre === candyMap[j][i]) { + count++ + } else { + res = Math.max(res, count) + pre = candyMap[j][i] + count = 1 + } + } + res = Math.max(res, count) + + // 열 검사 + count = 1 + pre = candyMap[i][0] + for (let j = 1; j < n; j++) { + if (pre === candyMap[i][j]) { + count++ + } else { + res = Math.max(res, count) + pre = candyMap[i][j] + count = 1 + } + } + res = Math.max(res, count) + } + return res + } + + const searchMap = (x, y) => { + for (let i = 0; i < 4; i++) { + let ax = x + dx[i] + let ay = y + dy[i] + let temp + + if (ax >= 0 && ay >= 0 && ax < n && ay < n) { + if (!visited[ax][ay]) { + temp = candyMap[x][y] + candyMap[x][y] = candyMap[ax][ay] + candyMap[ax][ay] = temp + + maxCandies = Math.max(maxCandies, getMaxCandies()) + + temp = candyMap[x][y] + candyMap[x][y] = candyMap[ax][ay] + candyMap[ax][ay] = temp + } + + visited[x][y] = true + } + } + } + + for (let i = 0; i < n; i++) { + for (let j = 0; j < n; j++) { + searchMap(i, j) + } + } + return maxCandies +} + +const answer = solution(n, candies) +console.log(answer) From fc58bcee670aeef608a2f2b27a2cf36e74e79b58 Mon Sep 17 00:00:00 2001 From: sena-22 Date: Thu, 11 May 2023 10:31:12 +0900 Subject: [PATCH 20/27] =?UTF-8?q?[BOJ]=20=EB=B6=80=EB=B6=84=EC=88=98?= =?UTF-8?q?=EC=97=B4=EC=9D=98=20=ED=95=A9=20/=20=EC=8B=A4=EB=B2=842=20/=20?= =?UTF-8?q?40=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...30\354\227\264\354\235\230\355\225\251.js" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "hyunjung/week20/\353\266\200\353\266\204\354\210\230\354\227\264\354\235\230\355\225\251.js" diff --git "a/hyunjung/week20/\353\266\200\353\266\204\354\210\230\354\227\264\354\235\230\355\225\251.js" "b/hyunjung/week20/\353\266\200\353\266\204\354\210\230\354\227\264\354\235\230\355\225\251.js" new file mode 100644 index 0000000..2c12837 --- /dev/null +++ "b/hyunjung/week20/\353\266\200\353\266\204\354\210\230\354\227\264\354\235\230\355\225\251.js" @@ -0,0 +1,28 @@ +const input = require("fs") + .readFileSync("/dev/stdin") + .toString() + .trim() + .split("\n") + +const [n, s] = input[0].split(" ").map(Number) +const array = input[1].split(" ").map(Number) + +function solution(n, s, array) { + let count = 0 + + const recursive = (i, sum) => { + if (i === n) return + + sum += array[i] + if (sum === s) count++ + + recursive(i + 1, sum) + recursive(i + 1, sum - array[i]) + } + + recursive(0, 0) + return count +} + +const answer = solution(n, s, array) +console.log(answer) From fbea347e20cf09a9a98fdd0ee55a8a8337b65874 Mon Sep 17 00:00:00 2001 From: sena-22 Date: Thu, 25 May 2023 05:23:51 +0900 Subject: [PATCH 21/27] =?UTF-8?q?[BOJ]=20=EC=97=B0=EC=86=8D=ED=95=A9=20/?= =?UTF-8?q?=20=EC=8B=A4=EB=B2=84=202=20/=201=EC=8B=9C=EA=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\227\260\354\206\215\355\225\251.js" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "hyunjung/week20/\354\227\260\354\206\215\355\225\251.js" diff --git "a/hyunjung/week20/\354\227\260\354\206\215\355\225\251.js" "b/hyunjung/week20/\354\227\260\354\206\215\355\225\251.js" new file mode 100644 index 0000000..8552ddc --- /dev/null +++ "b/hyunjung/week20/\354\227\260\354\206\215\355\225\251.js" @@ -0,0 +1,25 @@ +const input = require("fs") + .readFileSync("/dev/stdin") + .toString() + .trim() + .split("\n") + +const n = Number(input[0]) +const array = input[1].split(" ").map(Number) + +function solution(n, arr) { + let maxSum = [] + + for (let i = 0; i < n; i++) { + maxSum[i] = arr[i] + + if (maxSum[i] < maxSum[i - 1] + arr[i]) { + maxSum[i] = maxSum[i - 1] + arr[i] + } + } + + return Math.max(...maxSum) +} + +const answer = solution(n, array) +console.log(answer) From 0bc9785e0887a7de358e5f13a822e9d90cb76fe1 Mon Sep 17 00:00:00 2001 From: sena-22 Date: Thu, 25 May 2023 05:24:22 +0900 Subject: [PATCH 22/27] =?UTF-8?q?[BOJ]=20=EC=A7=84=EC=9A=B0=EC=9D=98=20?= =?UTF-8?q?=EB=8B=AC=20=EC=97=AC=ED=96=89=20/=20=EC=8B=A4=EB=B2=844=20/=20?= =?UTF-8?q?2=EC=8B=9C=EA=B0=84=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...30\353\213\254\354\227\254\355\226\211.js" | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 "hyunjung/week20/\354\247\204\354\232\260\354\235\230\353\213\254\354\227\254\355\226\211.js" diff --git "a/hyunjung/week20/\354\247\204\354\232\260\354\235\230\353\213\254\354\227\254\355\226\211.js" "b/hyunjung/week20/\354\247\204\354\232\260\354\235\230\353\213\254\354\227\254\355\226\211.js" new file mode 100644 index 0000000..689c386 --- /dev/null +++ "b/hyunjung/week20/\354\247\204\354\232\260\354\235\230\353\213\254\354\227\254\355\226\211.js" @@ -0,0 +1,45 @@ +const input = require("fs") + .readFileSync("/dev/stdin") + .toString() + .trim() + .split("\n") +const [n, m] = input[0].split(" ").map(Number) +const map = input.slice(1).map((el) => el.split(" ").map(Number)) + +const solution = (n, m, map) => { + let min = 600 + let visited + + const dy = [-1, 0, 1] + + const dfs = (depth, y, preD) => { + if (depth === n) { + let sum = map[0][visited[0]] + + for (let i = 1; i < n; i++) { + sum += map[i][visited[i]] + } + min = min > sum ? sum : min + return + } + + for (let i = 0; i < 3; i++) { + let ay = dy[i] + y + + if (ay >= 0 && ay < m && i !== preD) { + visited[depth] = ay + dfs(depth + 1, ay, i) + } + } + } + + for (let i = 0; i < m; i++) { + visited = new Array(n) + visited[0] = i + dfs(1, i, -1) + } + + return min +} +const answer = solution(n, m, map) +console.log(answer) From a1dad2aafaac13725d75d42441a918a60a10f4b9 Mon Sep 17 00:00:00 2001 From: sena-22 Date: Wed, 31 May 2023 09:57:59 +0900 Subject: [PATCH 23/27] =?UTF-8?q?[BOJ]=20=EB=B6=80=EB=B6=84=ED=95=A9=20/?= =?UTF-8?q?=20=EA=B3=A8=EB=93=9C4=20/=201=EC=8B=9C=EA=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\353\266\200\353\266\204\355\225\251.js" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "hyunjung/week21/\353\266\200\353\266\204\355\225\251.js" diff --git "a/hyunjung/week21/\353\266\200\353\266\204\355\225\251.js" "b/hyunjung/week21/\353\266\200\353\266\204\355\225\251.js" new file mode 100644 index 0000000..0773021 --- /dev/null +++ "b/hyunjung/week21/\353\266\200\353\266\204\355\225\251.js" @@ -0,0 +1,26 @@ +const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n') + +const [n, s] = input[0].split(' ').map(Number) +const arr = input[1].split(' ').map(Number) + +function solution(n, s, arr) { + let max = 987654321 + let min_length = max + let L = 0, + R = 0, + sum = 0 + + for (L; L < n; L++) { + while (sum < s && R < n) { + sum += arr[R++] + } + + if (sum >= s) { + min_length = Math.min(min_length, R - L) + } + sum -= arr[L] + } + return min_length === max ? 0 : min_length +} +const answer = solution(n, s, arr) +console.log(answer) From 6ecfd552ec125164e6fc2564c283dd3b7b229079 Mon Sep 17 00:00:00 2001 From: sena-22 Date: Wed, 31 May 2023 09:58:16 +0900 Subject: [PATCH 24/27] =?UTF-8?q?[BOJ]=20=EC=A2=8B=EB=8B=A4=20/=20?= =?UTF-8?q?=EA=B3=A8=EB=93=9C4=20/=201=EC=8B=9C=EA=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "hyunjung/week21/\354\242\213\353\213\244.js" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "hyunjung/week21/\354\242\213\353\213\244.js" diff --git "a/hyunjung/week21/\354\242\213\353\213\244.js" "b/hyunjung/week21/\354\242\213\353\213\244.js" new file mode 100644 index 0000000..feb14f9 --- /dev/null +++ "b/hyunjung/week21/\354\242\213\353\213\244.js" @@ -0,0 +1,35 @@ +const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n') + +const n = Number(input[0]) +const arr = input[1].split(' ').map(Number) + +function solution(n, arr) { + let good = 0 + + arr.sort((a, b) => a - b) + + for (let i = 0; i < n; i++) { + let left = 0 + let right = n - 1 + while (left < right) { + if (arr[left] + arr[right] === arr[i]) { + if (left !== i && right !== i) { + good++ + break + } else if (left === i) { + left++ + } else if (right === i) { + right-- + } + } else if (arr[left] + arr[right] > arr[i]) { + right-- + } else { + left++ + } + } + } + return good +} + +const answer = solution(n, arr) +console.log(answer) From 9709d2dfd51898c2bddadd8fcd4c58026fc99bf3 Mon Sep 17 00:00:00 2001 From: sena-22 Date: Wed, 31 May 2023 12:39:54 +0900 Subject: [PATCH 25/27] =?UTF-8?q?[BOJ]=20=EC=88=AB=EC=9E=90=EC=95=BC?= =?UTF-8?q?=EA=B5=AC=20/=20=EC=8B=A4=EB=B2=843=20/=20=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...53\354\236\220\354\225\274\352\265\254.js" | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 "hyunjung/week20/\354\210\253\354\236\220\354\225\274\352\265\254.js" diff --git "a/hyunjung/week20/\354\210\253\354\236\220\354\225\274\352\265\254.js" "b/hyunjung/week20/\354\210\253\354\236\220\354\225\274\352\265\254.js" new file mode 100644 index 0000000..481949f --- /dev/null +++ "b/hyunjung/week20/\354\210\253\354\236\220\354\225\274\352\265\254.js" @@ -0,0 +1,60 @@ +const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n') + +let [n, ...games] = input +n = +n +games = games.map((el) => el.split(' ').map(Number)) + +function solution(n, games) { + let result = 0 + + for (let i = 123; i < 988; i++) { + let hundreds = parseInt(i / 100) //100의 자리 + let tens = parseInt((i / 10) % 10) //10의 자리 + let units = i % 10 + + // 중복 제거 + if (hundreds === tens || hundreds === units || tens === units) continue + + // 0 제거 : 102 120 ... + if (tens === 0 || units === 0) continue + + let check = true + + for (let i = 0; i < n; i++) { + let strike = 0, + ball = 0 + + let answer = games[i][0] // 생각한 숫자 + let strikeAnswer = games[i][1] + let ballAnswer = games[i][2] + + let hundredsOfAnswer = parseInt(answer / 100) + let tensOfAnswer = parseInt((answer / 10) % 10) + let unitsOfAnswer = answer % 10 + + //정확하게 일치하는 경우 + if (hundreds === hundredsOfAnswer) strike++ + if (tens === tensOfAnswer) strike++ + if (units === unitsOfAnswer) strike++ + + // 숫자 일치 && 자리 일치 X + if (hundredsOfAnswer === tens || hundredsOfAnswer === units) ball++ + if (tensOfAnswer === hundreds || tensOfAnswer === units) ball++ + if (unitsOfAnswer === hundreds || unitsOfAnswer === tens) ball++ + + if (ball !== ballAnswer || strike !== strikeAnswer) { + // ball이나 strike 개수가 다른 경우 counting 되지 않음 + check = false + break + } + } + + if (check) { + result++ + } + } + return result +} + +const answer = solution(n, games) +console.log(answer) From cf60447a442e57e49ea32502d8d7445a4fd4404d Mon Sep 17 00:00:00 2001 From: sena-22 Date: Wed, 31 May 2023 12:41:07 +0900 Subject: [PATCH 26/27] =?UTF-8?q?[BOJ]=20List=20of=20Unique=20Numbers=20/?= =?UTF-8?q?=20=EA=B3=A8=EB=93=9C5=20/=20=EC=8B=9C=EA=B0=84=20=EC=B4=88?= =?UTF-8?q?=EA=B3=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hyunjung/week21/ListOfUniqueNumbers.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 hyunjung/week21/ListOfUniqueNumbers.js diff --git a/hyunjung/week21/ListOfUniqueNumbers.js b/hyunjung/week21/ListOfUniqueNumbers.js new file mode 100644 index 0000000..56bec32 --- /dev/null +++ b/hyunjung/week21/ListOfUniqueNumbers.js @@ -0,0 +1,26 @@ +// 시간 초과 +const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n') + +const n = Number(input[0]) +const arr = input[1].split(' ').map(Number) + +function solution(n, arr) { + let count = 0 + let left = 0 + let right = 0 + + while (left < n) { + if (arr[left] === arr[right + 1] || right === n - 1) { + left++ + right = left + count++ + continue + } + right++ + count++ + } + return count +} + +const answer = solution(n, arr) +console.log(answer) From 0e2cb5f98f8372d695f96697b0318a6b704b0a53 Mon Sep 17 00:00:00 2001 From: sena-22 Date: Thu, 1 Jun 2023 07:04:02 +0900 Subject: [PATCH 27/27] =?UTF-8?q?[BOJ]=20List=20of=20Unique=20Numbers=20/?= =?UTF-8?q?=20=EA=B3=A8=EB=93=9C5=20/=20=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hyunjung/week21/ListofUniqueNumber_2.js | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 hyunjung/week21/ListofUniqueNumber_2.js diff --git a/hyunjung/week21/ListofUniqueNumber_2.js b/hyunjung/week21/ListofUniqueNumber_2.js new file mode 100644 index 0000000..b9fa7bb --- /dev/null +++ b/hyunjung/week21/ListofUniqueNumber_2.js @@ -0,0 +1,26 @@ +const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n') + +const n = Number(input[0]) +const arr = input[1].split(' ').map(Number) + +function solution(n, arr) { + let count = 0, + L = 0, + R = 0 + let visited = new Array(n + 1).fill(0) + + for (L; L < n; L++) { + while (R < n) { + if (visited[arr[R]]) break + visited[arr[R]] = 1 + R++ + } + count += R - L + visited[arr[L]] = 0 + } + + return count +} + +const answer = solution(n, arr) +console.log(answer)