Skip to content

Commit

Permalink
add (programmers - level2 3문제, level 3, 4 각 1문제): js 풀이
Browse files Browse the repository at this point in the history
  • Loading branch information
padosum committed Feb 6, 2023
1 parent 0cf76ab commit 2e08dae
Show file tree
Hide file tree
Showing 5 changed files with 175 additions and 0 deletions.
16 changes: 16 additions & 0 deletions programmers/level2/[3차] n진수 게임.js
@@ -0,0 +1,16 @@
function solution(n, t, m, p) {
let answer = '';
const arr = [];

for (let i = 0; i < t * m; i++) {
arr.push(...i.toString(n).split(''));
}

for (let i = 0; i < t * m; i++) {
if (i % m === 0) {
answer += arr[i + p - 1]
}
}

return answer.toUpperCase();
}
25 changes: 25 additions & 0 deletions programmers/level2/오픈채팅방.js
@@ -0,0 +1,25 @@
function solution(record) {
const log = [];
const users = {};

record.forEach(r => {
const [action, uid, nickname] = r.split(" ");

if (action === "Enter") {
users[uid] = nickname;
log.push({ uid, action });
} else if (action === "Leave") {
log.push({ uid, action });
} else if (action === "Change") {
users[uid] = nickname;
}
});

const answer = log.map(({ uid, action }) => {
return `${users[uid]}님이 ${
action === "Enter" ? "들어왔습니다." : "나갔습니다."
}`;
});

return answer;
}
67 changes: 67 additions & 0 deletions programmers/level2/주차 요금 계산.js
@@ -0,0 +1,67 @@
function solution(fees, records) {
let answer = [];

const IN_LIST = {};
const OUT_LIST = {};

records.forEach(record => {
const [time, number, action] = record.split(" ");

if (action === "IN") {
if (IN_LIST[number]) {
IN_LIST[number].push(time);
} else {
IN_LIST[number] = [time];
}
} else if (action === "OUT") {
if (OUT_LIST[number]) {
OUT_LIST[number].push(time);
} else {
OUT_LIST[number] = [time];
}
}
});

const [base, baseCharge, unitTime, unitCharge] = fees;

for (const item of Object.entries(IN_LIST).sort(
([a], [b]) => Number(a) - Number(b)
)) {
const [number, inList] = item;
const outList = OUT_LIST[number];

let fee = 0;
let totalMinutes = 0;
inList.forEach((inTime, idx) => {
const [inHour, inMinutes] = inTime.split(":").map(Number);
const [outHour, outMinutes] =
outList && outList.length > idx
? outList[idx].split(":").map(Number)
: [23, 59];

let calcHour = outHour;
let calcMinutes = outMinutes;

if (calcMinutes < inMinutes) {
calcMinutes = calcMinutes + 60 - inMinutes;
calcHour = calcHour - 1;
} else {
calcMinutes = calcMinutes - inMinutes;
}

calcHour = calcHour - inHour;
totalMinutes += calcHour * 60 + calcMinutes;
});

if (base < totalMinutes) {
fee =
baseCharge + Math.ceil((totalMinutes - base) / unitTime) * unitCharge;
} else {
fee = baseCharge;
}

answer.push(fee);
}

return answer;
}
24 changes: 24 additions & 0 deletions programmers/level3/N으로 표현.js
@@ -0,0 +1,24 @@
function solution(N, number) {
const dp = Array.from({ length: 9 }, (v, i) => new Set());

for (let i = 1; i < 9; i++) {
dp[i].add("1".repeat(i) * N);
for (let j = 1; j < i; j++) {
for (const num1 of dp[j]) {
for (const num2 of dp[i - j]) {
dp[i].add(num1 + num2);
dp[i].add(num1 - num2);
dp[i].add(num1 * num2);
dp[i].add(num1 / num2);
}
}
}

if (dp[i].has(number)) {
return i;
}
}
return -1;
}

solution(2, 11);
43 changes: 43 additions & 0 deletions programmers/level4/사칙연산.js
@@ -0,0 +1,43 @@
function solution(arr) {
const len = Math.ceil(arr.length / 2);
const MAX_DP = Array.from({ length: len }, (v, i) =>
Array.from({ length: len }, (v, i) => -Infinity)
);
const MIN_DP = Array.from({ length: len }, (v, i) =>
Array.from({ length: len }, (v, i) => Infinity)
);

for (let i = 0; i < len; i++) {
MAX_DP[i][i] = Number(arr[i * 2]);
MIN_DP[i][i] = Number(arr[i * 2]);
}

for (let cnt = 1; cnt < len; cnt++) {
for (let i = 0; i < len - cnt; i++) {
const j = i + cnt;
for (let k = i; k < j; k++) {
if (arr[k * 2 + 1] === "+") {
MAX_DP[i][j] = Math.max(
MAX_DP[i][j],
MAX_DP[i][k] + MAX_DP[k + 1][j]
);
MIN_DP[i][j] = Math.min(
MIN_DP[i][j],
MIN_DP[i][k] + MIN_DP[k + 1][j]
);
} else {
MAX_DP[i][j] = Math.max(
MAX_DP[i][j],
MAX_DP[i][k] - MIN_DP[k + 1][j]
);
MIN_DP[i][j] = Math.min(
MIN_DP[i][j],
MIN_DP[i][k] - MAX_DP[k + 1][j]
);
}
}
}
}

return MAX_DP[0][len - 1];
}

0 comments on commit 2e08dae

Please sign in to comment.