From 8d8e9fc4dd0dea450e7757d9ce7281914ea1baeb Mon Sep 17 00:00:00 2001 From: KingDonggyu Date: Sat, 15 Apr 2023 14:37:02 +0900 Subject: [PATCH] KingDonggyu_Programmers_W22~W25 --- .../KingDonggyu/118668.js" | 58 ++++++++ .../KingDonggyu/118669.js" | 51 +++++++ .../KingDonggyu/12905.js" | 29 ++++ .../KingDonggyu/12907.js" | 17 +++ .../KingDonggyu/12927.js" | 24 ++++ .../KingDonggyu/12936.js" | 28 ++++ .../KingDonggyu/12938.js" | 16 +++ .../KingDonggyu/131703.js" | 70 ++++++++++ .../KingDonggyu/132266.js" | 30 +++++ .../KingDonggyu/136797.js" | 85 ++++++++++++ .../KingDonggyu/138476.js" | 33 +++++ .../KingDonggyu/150365.js" | 39 ++++++ .../KingDonggyu/150366.js" | 124 ++++++++++++++++++ .../KingDonggyu/150367.js" | 43 ++++++ .../KingDonggyu/150368.js" | 67 ++++++++++ .../KingDonggyu/150369.js" | 38 ++++++ .../KingDonggyu/152995.js" | 24 ++++ .../KingDonggyu/70130.js" | 46 +++++++ 18 files changed, 822 insertions(+) create mode 100644 "Programmers/[118668] \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270 \352\263\265\353\266\200/KingDonggyu/118668.js" create mode 100644 "Programmers/[118669] \353\223\261\354\202\260\354\275\224\354\212\244 \354\240\225\355\225\230\352\270\260/KingDonggyu/118669.js" create mode 100644 "Programmers/[12905] \352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/KingDonggyu/12905.js" create mode 100644 "Programmers/[12907] \352\261\260\354\212\244\353\246\204\353\217\210/KingDonggyu/12907.js" create mode 100644 "Programmers/[12927] \354\225\274\352\267\274 \354\247\200\354\210\230/KingDonggyu/12927.js" create mode 100644 "Programmers/[12936] \354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/KingDonggyu/12936.js" create mode 100644 "Programmers/[12938] \354\265\234\352\263\240\354\235\230 \354\247\221\355\225\251/KingDonggyu/12938.js" create mode 100644 "Programmers/[131703] 2\354\260\250\354\233\220 \353\217\231\354\240\204 \353\222\244\354\247\221\352\270\260/KingDonggyu/131703.js" create mode 100644 "Programmers/[132266] \353\266\200\353\214\200\353\263\265\352\267\200/KingDonggyu/132266.js" create mode 100644 "Programmers/[136797] \354\210\253\354\236\220 \355\203\200\354\236\220 \353\214\200\355\232\214/KingDonggyu/136797.js" create mode 100644 "Programmers/[138476] \352\267\244 \352\263\240\353\245\264\352\270\260/KingDonggyu/138476.js" create mode 100644 "Programmers/[150365] \353\257\270\353\241\234 \355\203\210\354\266\234 \353\252\205\353\240\271\354\226\264/KingDonggyu/150365.js" create mode 100644 "Programmers/[150366] \355\221\234 \353\263\221\355\225\251/KingDonggyu/150366.js" create mode 100644 "Programmers/[150367] \355\221\234\355\230\204 \352\260\200\353\212\245\355\225\234 \354\235\264\354\247\204\355\212\270\353\246\254/KingDonggyu/150367.js" create mode 100644 "Programmers/[150368] \354\235\264\353\252\250\355\213\260\354\275\230 \355\225\240\354\235\270\355\226\211\354\202\254/KingDonggyu/150368.js" create mode 100644 "Programmers/[150369] \355\203\235\353\260\260 \353\260\260\353\213\254\352\263\274 \354\210\230\352\261\260\355\225\230\352\270\260/KingDonggyu/150369.js" create mode 100644 "Programmers/[152995] \354\235\270\354\202\254\352\263\240\352\263\274/KingDonggyu/152995.js" create mode 100644 "Programmers/[70130] \354\212\244\355\203\200 \354\210\230\354\227\264/KingDonggyu/70130.js" diff --git "a/Programmers/[118668] \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270 \352\263\265\353\266\200/KingDonggyu/118668.js" "b/Programmers/[118668] \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270 \352\263\265\353\266\200/KingDonggyu/118668.js" new file mode 100644 index 00000000..efe034e6 --- /dev/null +++ "b/Programmers/[118668] \354\275\224\353\224\251 \355\205\214\354\212\244\355\212\270 \352\263\265\353\266\200/KingDonggyu/118668.js" @@ -0,0 +1,58 @@ +function solution(alp, cop, problems) { + let maxAlp = alp; + let maxCop = cop; + + for (let i = 0; i < problems.length; i++) { + if (maxAlp < problems[i][0]) { + maxAlp = problems[i][0]; + } + + if (maxCop < problems[i][1]) { + maxCop = problems[i][1]; + } + } + + const dp = Array.from(Array(maxAlp + 1), () => + Array(maxCop + 1).fill(Infinity) + ); + + dp[alp][cop] = 0; + + for (let x = alp; x <= maxAlp; x++) { + for (let y = cop; y <= maxCop; y++) { + if (x < maxAlp) { + dp[x + 1][y] = + dp[x][y] + 1 < dp[x + 1][y] ? dp[x][y] + 1 : dp[x + 1][y]; + } + + if (y < maxCop) { + dp[x][y + 1] = + dp[x][y] + 1 < dp[x][y + 1] ? dp[x][y] + 1 : dp[x][y + 1]; + } + + for (const [alpReq, copReq, alpRwd, copRwd, cost] of problems) { + if (x < alpReq || y < copReq) { + continue; + } + + let anotherX = x + alpRwd; + let anotherY = y + copRwd; + + if (anotherX > maxAlp) { + anotherX = maxAlp; + } + + if (anotherY > maxCop) { + anotherY = maxCop; + } + + dp[anotherX][anotherY] = + dp[anotherX][anotherY] < dp[x][y] + cost + ? dp[anotherX][anotherY] + : dp[x][y] + cost; + } + } + } + + return dp[maxAlp][maxCop]; +} diff --git "a/Programmers/[118669] \353\223\261\354\202\260\354\275\224\354\212\244 \354\240\225\355\225\230\352\270\260/KingDonggyu/118669.js" "b/Programmers/[118669] \353\223\261\354\202\260\354\275\224\354\212\244 \354\240\225\355\225\230\352\270\260/KingDonggyu/118669.js" new file mode 100644 index 00000000..88eaf57b --- /dev/null +++ "b/Programmers/[118669] \353\223\261\354\202\260\354\275\224\354\212\244 \354\240\225\355\225\230\352\270\260/KingDonggyu/118669.js" @@ -0,0 +1,51 @@ +function solution(n, paths, gates, summits) { + const graph = Array.from(Array(n + 1), () => []); + const isSummit = Array(n + 1).fill(false); + + paths.forEach(([a, b, time]) => { + graph[a].push([b, time]); + graph[b].push([a, time]); + }); + + summits.forEach((summit) => { + isSummit[summit] = true; + }); + + const queue = []; + const visited = Array(n + 1).fill(Infinity); + + gates.forEach((gate) => { + queue.push(gate); + visited[gate] = 0; + }); + + while (queue.length) { + const now = queue.shift(); + + if (isSummit[now]) { + continue; + } + + graph[now].forEach(([next, time]) => { + const intensity = Math.max(time, visited[now]); + + if (intensity < visited[next]) { + visited[next] = intensity; + queue.push(next); + } + }); + } + + let answer = [0, Infinity]; + + for (let i = 1; i < n + 1; i++) { + if (!isSummit[i]) { + continue; + } + if (answer[1] > visited[i]) { + answer = [i, visited[i]]; + } + } + + return answer; +} diff --git "a/Programmers/[12905] \352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/KingDonggyu/12905.js" "b/Programmers/[12905] \352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/KingDonggyu/12905.js" new file mode 100644 index 00000000..33c3cfd7 --- /dev/null +++ "b/Programmers/[12905] \352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/KingDonggyu/12905.js" @@ -0,0 +1,29 @@ +function checkIsOutOfBounds(x, y, n, m) { + return x < 0 || y < 0; +} + +function solution(board) { + let answer = 0; + const N = board.length; + const M = board[0].length; + + board.forEach((row, x) => { + row.forEach((_, y) => { + if ( + !board[x][y] || + checkIsOutOfBounds(x - 1, y - 1, N, M) || + checkIsOutOfBounds(x - 1, y, N, M) || + checkIsOutOfBounds(x, y - 1, N, M) + ) { + return; + } + + board[x][y] = + Math.min(board[x - 1][y - 1], board[x - 1][y], board[x][y - 1]) + 1; + + answer = Math.max(answer, board[x][y]); + }); + }); + + return answer * answer; +} diff --git "a/Programmers/[12907] \352\261\260\354\212\244\353\246\204\353\217\210/KingDonggyu/12907.js" "b/Programmers/[12907] \352\261\260\354\212\244\353\246\204\353\217\210/KingDonggyu/12907.js" new file mode 100644 index 00000000..57c803ad --- /dev/null +++ "b/Programmers/[12907] \352\261\260\354\212\244\353\246\204\353\217\210/KingDonggyu/12907.js" @@ -0,0 +1,17 @@ +const DIVIDER = 1000000007; + +function solution(n, money) { + const dp = Array(n + 1).fill(0); + + dp[0] = 1; + + money.forEach((m) => { + for (let change = 0; change <= n; change++) { + if (change >= m) { + dp[change] += dp[change - m] % DIVIDER; + } + } + }); + + return dp[n]; +} diff --git "a/Programmers/[12927] \354\225\274\352\267\274 \354\247\200\354\210\230/KingDonggyu/12927.js" "b/Programmers/[12927] \354\225\274\352\267\274 \354\247\200\354\210\230/KingDonggyu/12927.js" new file mode 100644 index 00000000..f8cd8482 --- /dev/null +++ "b/Programmers/[12927] \354\225\274\352\267\274 \354\247\200\354\210\230/KingDonggyu/12927.js" @@ -0,0 +1,24 @@ +function solution(n, works) { + const sorted = works.sort((a, b) => b - a); + + while (n) { + const max = sorted[0]; + + for (let i = 0; i < sorted.length; i++) { + if (max <= sorted[i]) { + sorted[i] -= 1; + n -= 1; + } + if (!n) { + break; + } + } + } + + return sorted.reduce((acc, cur) => { + if (cur < 0) { + return acc; + } + return acc + cur ** 2; + }, 0); +} diff --git "a/Programmers/[12936] \354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/KingDonggyu/12936.js" "b/Programmers/[12936] \354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/KingDonggyu/12936.js" new file mode 100644 index 00000000..ebb16ea7 --- /dev/null +++ "b/Programmers/[12936] \354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/KingDonggyu/12936.js" @@ -0,0 +1,28 @@ +function factorial(number) { + if (number === 1) { + return 1; + } + + const result = number * factorial(number - 1); + return result; +} + +function solution(n, k) { + const answer = []; + let caseCount = factorial(n); + let people = Array(n) + .fill(0) + .map((_, i) => i + 1); + + while (answer.length < n) { + caseCount = Math.floor(caseCount / people.length); + + const index = Math.floor((k - 1) / caseCount); + const selectedPerson = people.splice(index, 1)[0]; + + answer.push(selectedPerson); + k = k % caseCount; + } + + return answer; +} diff --git "a/Programmers/[12938] \354\265\234\352\263\240\354\235\230 \354\247\221\355\225\251/KingDonggyu/12938.js" "b/Programmers/[12938] \354\265\234\352\263\240\354\235\230 \354\247\221\355\225\251/KingDonggyu/12938.js" new file mode 100644 index 00000000..b88ebd89 --- /dev/null +++ "b/Programmers/[12938] \354\265\234\352\263\240\354\235\230 \354\247\221\355\225\251/KingDonggyu/12938.js" @@ -0,0 +1,16 @@ +function solution(n, s) { + if (n > s) { + return [-1]; + } + + const answer = []; + + while (n) { + const value = Math.floor(s / n); + answer.push(value); + s -= value; + n--; + } + + return answer; +} diff --git "a/Programmers/[131703] 2\354\260\250\354\233\220 \353\217\231\354\240\204 \353\222\244\354\247\221\352\270\260/KingDonggyu/131703.js" "b/Programmers/[131703] 2\354\260\250\354\233\220 \353\217\231\354\240\204 \353\222\244\354\247\221\352\270\260/KingDonggyu/131703.js" new file mode 100644 index 00000000..6cb9f3c9 --- /dev/null +++ "b/Programmers/[131703] 2\354\260\250\354\233\220 \353\217\231\354\240\204 \353\222\244\354\247\221\352\270\260/KingDonggyu/131703.js" @@ -0,0 +1,70 @@ +function filpRow(coins, row) { + for (let col = 0; col < coins[0].length; col++) { + coins[row][col] = coins[row][col] ? 0 : 1; + } +} + +function flipColumn(coins, col) { + for (let row = 0; row < coins.length; row++) { + coins[row][col] = coins[row][col] ? 0 : 1; + } +} + +function solution(beginning, target) { + const N = beginning.length; + const M = beginning[0].length; + const MAX = N * M + 1; + + let answer = MAX; + const visited = Array(N + M).fill(false); + + function dfs(count) { + if (answer <= count) { + return; + } + + for (let row = 0; row < N; row++) { + for (let col = 0; col < M; col++) { + if (beginning[row][col] === target[row][col]) { + continue; + } + + // 행 뒤집기 + if (!visited[row]) { + visited[row] = true; + filpRow(beginning, row); + + dfs(count + 1); + + visited[row] = false; + filpRow(beginning, row); + } + + // 열 뒤집기 + if (!visited[N + col]) { + visited[N + col] = true; + flipColumn(beginning, col); + + dfs(count + 1); + + visited[N + col] = false; + flipColumn(beginning, col); + } + + // 실패 + return; + } + } + + // 성공 + answer = count; + } + + dfs(0); + + if (answer < MAX) { + return answer; + } + + return -1; +} diff --git "a/Programmers/[132266] \353\266\200\353\214\200\353\263\265\352\267\200/KingDonggyu/132266.js" "b/Programmers/[132266] \353\266\200\353\214\200\353\263\265\352\267\200/KingDonggyu/132266.js" new file mode 100644 index 00000000..64735609 --- /dev/null +++ "b/Programmers/[132266] \353\266\200\353\214\200\353\263\265\352\267\200/KingDonggyu/132266.js" @@ -0,0 +1,30 @@ +function solution(n, roads, sources, destination) { + const graph = Array.from(Array(n + 1), () => []); + + roads.forEach(([a, b]) => { + graph[a].push(b); + graph[b].push(a); + }); + + const queue = [destination]; + const visited = Array(n + 1).fill(Infinity); + + visited[destination] = 0; + + while (queue.length) { + const started = queue.shift(); + + graph[started].forEach((arrived) => { + const time = visited[started] + 1; + + if (visited[arrived] <= time) { + return; + } + + visited[arrived] = time; + queue.push(arrived); + }); + } + + return sources.map((s) => (visited[s] === Infinity ? -1 : visited[s])); +} diff --git "a/Programmers/[136797] \354\210\253\354\236\220 \355\203\200\354\236\220 \353\214\200\355\232\214/KingDonggyu/136797.js" "b/Programmers/[136797] \354\210\253\354\236\220 \355\203\200\354\236\220 \353\214\200\355\232\214/KingDonggyu/136797.js" new file mode 100644 index 00000000..c64ec01b --- /dev/null +++ "b/Programmers/[136797] \354\210\253\354\236\220 \355\203\200\354\236\220 \353\214\200\355\232\214/KingDonggyu/136797.js" @@ -0,0 +1,85 @@ +function calculateTime(hand, target) { + // 제자리에서 누르기 + if (hand === target) { + return 1; + } + + const keyboard = { + 1: [0, 0], + 2: [0, 1], + 3: [0, 2], + 4: [1, 0], + 5: [1, 1], + 6: [1, 2], + 7: [2, 0], + 8: [2, 1], + 9: [2, 2], + 0: [3, 1], + }; + + let x = Math.abs(keyboard[hand][0] - keyboard[target][0]); + let y = Math.abs(keyboard[hand][1] - keyboard[target][1]); + + let time = 0; + + // 대각선으로 이동하기 + while (x && y) { + x -= 1; + y -= 1; + time += 3; + } + + // 상하좌우로 이동하기 + time += (x + y) * 2; + + return time; +} + +function getTimes() { + const result = []; + + for (let hand = 0; hand < 10; hand++) { + const times = []; + + for (let target = 0; target < 10; target++) { + times.push(calculateTime(hand, target)); + } + + result.push(times); + } + + return result; +} + +function solution(numbers) { + const times = getTimes(); + const dp = Array.from(Array(numbers.length + 1), () => + Array.from(Array(10), () => Array(10).fill(Infinity)) + ); + + dp[0][4][6] = 0; + + for (let i = 0; i < numbers.length; i++) { + const num = numbers[i]; + + for (let left = 0; left < 10; left++) { + for (let right = 0; right < 10; right++) { + const prevTime = dp[i][left][right]; + + if (left === right || prevTime === Infinity) { + continue; + } + + if (dp[i + 1][num][right] > prevTime + times[left][num]) { + dp[i + 1][num][right] = prevTime + times[left][num]; + } + + if (dp[i + 1][left][num] > prevTime + times[right][num]) { + dp[i + 1][left][num] = prevTime + times[right][num]; + } + } + } + } + + return Math.min(...dp[numbers.length].flat()); +} diff --git "a/Programmers/[138476] \352\267\244 \352\263\240\353\245\264\352\270\260/KingDonggyu/138476.js" "b/Programmers/[138476] \352\267\244 \352\263\240\353\245\264\352\270\260/KingDonggyu/138476.js" new file mode 100644 index 00000000..cb60a1d0 --- /dev/null +++ "b/Programmers/[138476] \352\267\244 \352\263\240\353\245\264\352\270\260/KingDonggyu/138476.js" @@ -0,0 +1,33 @@ +function solution(k, tangerine) { + const type = new Map(); + + tangerine.forEach((t) => { + if (type.has(t)) { + type.set(t, type.get(t) + 1); + return; + } + type.set(t, 1); + }); + + const sortedTangerines = Array.from(type.entries()).sort( + (a, b) => b[1] - a[1] + ); + + if (sortedTangerines[0][1] >= k) { + return 1; + } + + let answer = 0; + let count = 0; + + for (let i = 0; i < type.size; i++) { + count += sortedTangerines[i][1]; + answer += 1; + + if (count >= k) { + break; + } + } + + return answer; +} diff --git "a/Programmers/[150365] \353\257\270\353\241\234 \355\203\210\354\266\234 \353\252\205\353\240\271\354\226\264/KingDonggyu/150365.js" "b/Programmers/[150365] \353\257\270\353\241\234 \355\203\210\354\266\234 \353\252\205\353\240\271\354\226\264/KingDonggyu/150365.js" new file mode 100644 index 00000000..31047fd7 --- /dev/null +++ "b/Programmers/[150365] \353\257\270\353\241\234 \355\203\210\354\266\234 \353\252\205\353\240\271\354\226\264/KingDonggyu/150365.js" @@ -0,0 +1,39 @@ +function checkIsOutOfBounds(n, m, x, y) { + return !x || x > n || !y || y > m; +} + +function solution(n, m, x, y, r, c, k) { + const stack = [[x, y, []]]; + + // 상 우 좌 하 + const characters = ['u', 'r', 'l', 'd']; + const dx = [-1, 0, 0, 1]; + const dy = [0, 1, -1, 0]; + + while (stack.length) { + const [a, b, string] = stack.pop(); + + const remain = k - string.length; + const shortest = Math.abs(a - r) + Math.abs(b - c); + + if (string.length > k || remain < shortest || (remain - shortest) % 2) { + continue; + } + + if (a === r && b === c && string.length === k) { + return string.join(''); + } + + for (let i = 0; i < 4; i++) { + const [na, nb] = [a + dx[i], b + dy[i]]; + + if (checkIsOutOfBounds(n, m, na, nb)) { + continue; + } + + stack.push([na, nb, [...string, characters[i]]]); + } + } + + return 'impossible'; +} diff --git "a/Programmers/[150366] \355\221\234 \353\263\221\355\225\251/KingDonggyu/150366.js" "b/Programmers/[150366] \355\221\234 \353\263\221\355\225\251/KingDonggyu/150366.js" new file mode 100644 index 00000000..e328dfa8 --- /dev/null +++ "b/Programmers/[150366] \355\221\234 \353\263\221\355\225\251/KingDonggyu/150366.js" @@ -0,0 +1,124 @@ +function encodeKey(r, c) { + return `${r},${c}`; +} + +function decodeKey(key) { + return key.split(','); +} + +function updateTableByMergeMap(table, r, c, mergeMap) { + const key = encodeKey(r, c); + + if (!mergeMap.has(key)) { + return; + } + + Array.from(mergeMap.get(key)).forEach((k) => { + const [x, y] = decodeKey(k); + + if (table[x][y] === table[r][c]) { + return; + } + + table[x][y] = table[r][c]; + updateTableByMergeMap(table, x, y, mergeMap); + }); +} + +function updateValue(table, r, c, value, mergeMap) { + table[r][c] = value; + updateTableByMergeMap(table, r, c, mergeMap); +} + +function updateValueToAnotherValue(table, value1, value2, mergeMap) { + table.forEach((row, x) => { + row.forEach((_, y) => { + if (x && y && table[x][y] === value1) { + table[x][y] = value2; + updateTableByMergeMap(table, x, y, mergeMap); + } + }); + }); +} + +function merge(table, r1, c1, r2, c2, mergeMap) { + const value = table[r1][c1] || table[r2][c2]; + + table[r1][c1] = value; + table[r2][c2] = value; + + [ + [r1, c1], + [r2, c2], + ].forEach(([r, c]) => { + const key = encodeKey(r, c); + + const otherKey = + r === r1 && c === c1 ? encodeKey(r2, c2) : encodeKey(r1, c1); + + if (mergeMap.has(key)) { + mergeMap.get(key).add(otherKey); + } else { + mergeMap.set(key, new Set([otherKey])); + } + + updateTableByMergeMap(table, r, c, mergeMap); + }); +} + +function unmerge(table, r, c, mergeMap) { + const key = encodeKey(r, c); + + if (!mergeMap.has(key)) { + return; + } + + const merged = Array.from(mergeMap.get(key)); + + mergeMap.delete(key); + + merged.forEach((k) => { + const [x, y] = decodeKey(k); + table[x][y] = null; + unmerge(table, x, y, mergeMap); + }); +} + +function print(table, r, c) { + if (!table[r][c]) { + return 'EMPTY'; + } + return table[r][c]; +} + +function solution(commands) { + const answer = []; + const mergeMap = new Map(); + const table = Array.from(Array(51), () => Array(51).fill(null)); + + commands.forEach((cmd) => { + const c = cmd.split(' '); + + switch (c[0]) { + case 'UPDATE': + if (c.length === 4) { + updateValue(table, c[1], c[2], c[3], mergeMap); + break; + } + updateValueToAnotherValue(table, c[1], c[2], mergeMap); + break; + case 'MERGE': + merge(table, c[1], c[2], c[3], c[4], mergeMap); + break; + case 'UNMERGE': + const value = table[c[1]][c[2]]; + unmerge(table, c[1], c[2], mergeMap); + table[c[1]][c[2]] = value; + break; + default: + answer.push(print(table, c[1], c[2])); + } + }); + + return answer; +} diff --git "a/Programmers/[150367] \355\221\234\355\230\204 \352\260\200\353\212\245\355\225\234 \354\235\264\354\247\204\355\212\270\353\246\254/KingDonggyu/150367.js" "b/Programmers/[150367] \355\221\234\355\230\204 \352\260\200\353\212\245\355\225\234 \354\235\264\354\247\204\355\212\270\353\246\254/KingDonggyu/150367.js" new file mode 100644 index 00000000..701c08c5 --- /dev/null +++ "b/Programmers/[150367] \355\221\234\355\230\204 \352\260\200\353\212\245\355\225\234 \354\235\264\354\247\204\355\212\270\353\246\254/KingDonggyu/150367.js" @@ -0,0 +1,43 @@ +function getExtraZeroCount(binary) { + const nextBinary = binary.length.toString(2); + return 2 ** nextBinary.length - 1 - binary.length; +} + +function checkIsBinaryTree(treeString, start, end) { + if (start === end) { + return 1; + } + + const parent = Math.floor((start + end) / 2); + const leftChild = Math.floor((start + parent - 1) / 2); + const rightChild = Math.floor((end + parent + 1) / 2); + + if ( + treeString[parent] === '0' && + (treeString[leftChild] === '1' || treeString[rightChild] === '1') + ) { + return 0; + } + + if (!checkIsBinaryTree(treeString, start, parent - 1)) { + return 0; + } + + if (!checkIsBinaryTree(treeString, parent + 1, end)) { + return 0; + } + + return 1; +} + +function solution(numbers) { + const answer = numbers.map((number) => { + const binary = number.toString(2); + const extraZeroCount = getExtraZeroCount(binary); + const treeString = '0'.repeat(extraZeroCount) + binary; + + return checkIsBinaryTree(treeString, 0, treeString.length - 1); + }); + + return answer; +} diff --git "a/Programmers/[150368] \354\235\264\353\252\250\355\213\260\354\275\230 \355\225\240\354\235\270\355\226\211\354\202\254/KingDonggyu/150368.js" "b/Programmers/[150368] \354\235\264\353\252\250\355\213\260\354\275\230 \355\225\240\354\235\270\355\226\211\354\202\254/KingDonggyu/150368.js" new file mode 100644 index 00000000..79bc54d1 --- /dev/null +++ "b/Programmers/[150368] \354\235\264\353\252\250\355\213\260\354\275\230 \355\225\240\354\235\270\355\226\211\354\202\254/KingDonggyu/150368.js" @@ -0,0 +1,67 @@ +function getPermutation(arr, count) { + if (count === 1) { + return arr.map((el) => [el]); + } + + const result = []; + + arr.forEach((fixed, index, origin) => { + const permutation = getPermutation(origin, count - 1); + const attached = permutation.map((el) => [fixed, ...el]); + + result.push(...attached); + }); + + return result; +} + +function getTotalPrice(sales, saledPrices, limitSale) { + const totalPrice = sales.reduce((acc, sale, i) => { + if (limitSale <= sale) { + return acc + saledPrices[i]; + } + return acc; + }, 0); + + return totalPrice; +} + +function solution(users, emoticons) { + const permutation = getPermutation([10, 20, 30, 40], emoticons.length); + + const answers = permutation.map((sales) => { + const result = [0, 0]; + + const saledPrices = emoticons.map((price, i) => { + return price - (price / 100) * sales[i]; + }); + + users.forEach(([limitSale, limitPrice]) => { + const totalPrice = getTotalPrice(sales, saledPrices, limitSale); + + if (limitPrice <= totalPrice) { + result[0] += 1; + return; + } + + result[1] += totalPrice; + }); + + return result; + }); + + const answer = answers.reduce( + (acc, cur) => { + if (cur[0] > acc[0]) { + return cur; + } + if (cur[0] === acc[0] && cur[1] > acc[1]) { + return cur; + } + return acc; + }, + [0, 0] + ); + + return answer; +} diff --git "a/Programmers/[150369] \355\203\235\353\260\260 \353\260\260\353\213\254\352\263\274 \354\210\230\352\261\260\355\225\230\352\270\260/KingDonggyu/150369.js" "b/Programmers/[150369] \355\203\235\353\260\260 \353\260\260\353\213\254\352\263\274 \354\210\230\352\261\260\355\225\230\352\270\260/KingDonggyu/150369.js" new file mode 100644 index 00000000..2c6bae6d --- /dev/null +++ "b/Programmers/[150369] \355\203\235\353\260\260 \353\260\260\353\213\254\352\263\274 \354\210\230\352\261\260\355\225\230\352\270\260/KingDonggyu/150369.js" @@ -0,0 +1,38 @@ +function initCourierBox(boxes) { + while (!!boxes.length && !boxes[boxes.length - 1]) { + boxes.pop(); + } +} + +function handleCourierBox(cap, boxes) { + while (!!cap && !!boxes.length) { + const index = boxes.length - 1; + + if (!!boxes[index]) { + boxes[index] -= 1; + cap -= 1; + } + + if (!boxes[index]) { + boxes.pop(); + } + } +} + +function solution(cap, n, deliveries, pickups) { + let answer = 0; + + while (!!deliveries.length || !!pickups.length) { + initCourierBox(deliveries); + initCourierBox(pickups); + + const maxDistance = Math.max(deliveries.length, pickups.length); + + handleCourierBox(cap, deliveries); + handleCourierBox(cap, pickups); + + answer += maxDistance * 2; + } + + return answer; +} diff --git "a/Programmers/[152995] \354\235\270\354\202\254\352\263\240\352\263\274/KingDonggyu/152995.js" "b/Programmers/[152995] \354\235\270\354\202\254\352\263\240\352\263\274/KingDonggyu/152995.js" new file mode 100644 index 00000000..a6176ada --- /dev/null +++ "b/Programmers/[152995] \354\235\270\354\202\254\352\263\240\352\263\274/KingDonggyu/152995.js" @@ -0,0 +1,24 @@ +function solution(scores) { + let answer = 1; + let maxScoreB = 0; + const myScore = scores[0]; + + scores.sort((a, b) => (a[0] === b[0] ? a[1] - b[1] : b[0] - a[0])); + + for (let score of scores) { + if (score[1] < maxScoreB) { + if (myScore === score) { + return -1; + } + continue; + } + + if (myScore[0] + myScore[1] < score[0] + score[1]) { + answer += 1; + } + + maxScoreB = score[1]; + } + + return answer; +} diff --git "a/Programmers/[70130] \354\212\244\355\203\200 \354\210\230\354\227\264/KingDonggyu/70130.js" "b/Programmers/[70130] \354\212\244\355\203\200 \354\210\230\354\227\264/KingDonggyu/70130.js" new file mode 100644 index 00000000..35017891 --- /dev/null +++ "b/Programmers/[70130] \354\212\244\355\203\200 \354\210\230\354\227\264/KingDonggyu/70130.js" @@ -0,0 +1,46 @@ +function solution(a) { + if (a < 2 || a % 2) { + return 0; + } + + const countMap = a.reduce((acc, cur) => { + if (!acc.has(cur)) { + acc.set(cur, 0); + } + acc.set(cur, acc.get(cur) + 1); + return acc; + }, new Map()); + + const sorted = Array.from(countMap.entries()).sort((a, b) => b[1] - a[1]); + + let answer = 0; + + for (const [num, count] of sorted) { + if (count <= answer) { + continue; + } + + let star = 0; + + for (let i = 0; i < a.length; i++) { + if (i === a.length - 1) { + continue; + } + + if (a[i] === a[i + 1]) { + continue; + } + + if (a[i] !== num && a[i + 1] !== num) { + continue; + } + + star += 1; + i += 1; + } + + answer = Math.max(answer, star); + } + + return answer * 2; +}