Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions src/problem1.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,31 @@
function problem1(pobi, crong) {
var answer;
return answer;
if (pobi[1]-pobi[0] != 1 || crong[1]-crong[0] != 1) return -1;
if (Math.min(pobi, crong) < 1 || Math.max(pobi, crong) > 400) return -1;

const max_pobi = Math.max(...sumAndProduct(pobi));
const max_crong = Math.max(...sumAndProduct(crong));

if (max_pobi == max_crong) return 0;
if (max_pobi > max_crong) return 1;

else return 2;
}

function sumAndProduct(arr){
const ret = [];

arr.forEach(page => {
const digits = [];

while(page > 0){
digits.push(page % 10);
page = parseInt(page / 10);
}
ret.push(digits.reduce((acc, cur) => acc + cur, 0)); // 누적 합
ret.push(digits.reduce((acc, cur) => acc * cur, 1)); // 누적 곱
});

return ret;
}

module.exports = problem1;
10 changes: 8 additions & 2 deletions src/problem2.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
function problem2(cryptogram) {
var answer;
return answer;
const stack = [];

[...cryptogram].forEach(char => {
if(stack.at(-1) != char) stack.push(char);
else stack.pop();
});

return stack.toString().replaceAll(',','');
}

module.exports = problem2;
14 changes: 12 additions & 2 deletions src/problem3.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
function problem3(number) {
var answer;
return answer;
let count = 0;
for (let i=1; i<=number; ++i) count += count369(i);
return count;
}

function count369(number){
let count = 0;
while (number > 0){
switch (number % 10) {case 3: case 6: case 9: ++count};
number = parseInt(number / 10);
}
return count;
}

module.exports = problem3;
12 changes: 11 additions & 1 deletion src/problem4.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
function problem4(word) {
var answer;
var answer = "";

[...word].forEach(char => {
if (/[A-Z]/.test(char))
answer += String.fromCharCode(65+25-(char.charCodeAt()-65));
else if (/[a-z]/.test(char))
answer += String.fromCharCode(97+25-(char.charCodeAt()-97));
else
answer += char;
});

return answer;
}

Expand Down
7 changes: 6 additions & 1 deletion src/problem5.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
function problem5(money) {
var answer;
const answer = [];
const denoms = [50000, 10000, 5000, 1000, 500, 100, 50, 10, 1];
denoms.forEach(denom => {
answer.push(parseInt(money / denom));
money %= denom;
});
return answer;
}

Expand Down
19 changes: 17 additions & 2 deletions src/problem6.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
function problem6(forms) {
var answer;
return answer;
const set = new Set();
const map = new Map();

forms.forEach(([email, nickname]) => {
for (let i=0; i<nickname.length-1; ++i) {
for (let j=i+2; j<=nickname.length; ++j) {
const substr = nickname.slice(i, j);
if (map.has(substr)) {
set.add(email);
set.add(map.get(substr));
}
else map.set(substr, email);
}
}
});

return Array.from(set).sort();
}

module.exports = problem6;
38 changes: 36 additions & 2 deletions src/problem7.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,40 @@
function problem7(user, friends, visitors) {
var answer;
return answer;
const map_friends = new Map();
const map_scores = new Map();

friends.forEach(([a,b]) => {
if (!map_friends.has(a)) map_friends.set(a, new Set());
if (!map_friends.has(b)) map_friends.set(b, new Set());
map_friends.get(a).add(b);
map_friends.get(b).add(a);
});

const user_friends = map_friends.get(user) || new Set();

map_friends.forEach((set_friends, friend) => {
if (friend === user || user_friends.has(friend)) return;
let count = 0;
set_friends.forEach(person => {
if (user_friends.has(person)) ++count;
});

if (count > 0)
map_scores.set(friend, (map_scores.get(friend) || 0) + count * 10);
});

visitors.forEach(visitor => {
if (visitor !== user && !user_friends.has(visitor)){
map_scores.set(visitor, (map_scores.get(visitor) || 0) + 1);
}
});

const ret = Array.from(map_scores.entries())
.filter(([, score]) => score > 0)
.sort((a,b) => b[1]-a[1] || a[0].localeCompare(b[0]))
.slice(0,5)
.map(([friend]) => friend);

return ret;
}

module.exports = problem7;