Skip to content

[week 5] 주간 결산_연서 #16

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
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
10 changes: 10 additions & 0 deletions 연서/week5/level 1/같은숫자는싫어.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
function solution(arr) {
var answer = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i + 1]) {
answer.push(arr[i]);
}
}

return answer;
}
13 changes: 13 additions & 0 deletions 연서/week5/level 1/명예의전당.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
function solution(k, score) {
const scoreStack = [];
return score.map((s, idx) => {
// 값을 넣고 내림차순 정렬
scoreStack.push(s);
scoreStack.sort((a, b) => b - a);
// k보다 넘쳤을 때 순위가 낮은 점수 제외
if (scoreStack.length > k) {
scoreStack.pop();
}
return scoreStack[scoreStack.length - 1];
});
}
6 changes: 6 additions & 0 deletions 연서/week5/level 1/부족한금액계산.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//가우스 공식 (등차수열의 합 = (첫항 + 마지막항) * (항의 개수) / 2)
function solution(price, money, count) {
//가우스 공식 활용 부분
const tmp = (price * (count + 1) * count) / 2 - money;
return tmp > 0 ? tmp : 0;
}
7 changes: 7 additions & 0 deletions 연서/week5/level 1/예산.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
function solution(d, budget) {
return d
.sort((a, b) => a - b)
.reduce((count, price) => {
return count + Number((budget -= price) >= 0);
}, 0);
}
11 changes: 11 additions & 0 deletions 연서/week5/level 1/콜라문제.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
function solution(a, b, n) {
let total = 0;
let now = 0;

while (n >= a) {
now = Math.floor(n / a) * b;
total += now;
n = now + (n % a);
}
return total;
}
9 changes: 9 additions & 0 deletions 연서/week5/level 2/N개의최소공배수.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
function solution(arr) {
// 유클리드호제법으로 최대공약수 구하기
const gcd = (a, b) => {
return a % b ? gcd(b, a % b) : b;
};

// 최대공배수는 두 수의 곱 / 최대공약수
return arr.reduce((a, b) => (a * b) / gcd(a, b));
}
29 changes: 29 additions & 0 deletions 연서/week5/level 2/괄호회전하기.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
function solution(s) {
if (s.length % 2 === 1) return 0;

let answer = 0;
const correctSet = {
"}": "{",
"]": "[",
")": "(",
};

for (let i = 0; i < s.length; i++) {
const stack = [];
const rotate = s.slice(i) + s.slice(0, i);
let flag = true;
rotate.split("").forEach((target) => {
if (target === "{" || target === "[" || target === "(") {
stack.push(target);
} else {
if (stack.pop() !== correctSet[target]) {
flag = false;
return;
}
}
});

if (flag) answer++;
}
return answer;
}
19 changes: 19 additions & 0 deletions 연서/week5/level 2/의상.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
function solution(clothes) {
const map = new Map(); //해시 자료구조 구현을 위한 Map 객체 생성

let cnt = 1;

for (let [cloth, type] of clothes) {
if (map.has(type)) {
map.set(type, map.get(type) + 1);
} else {
map.set(type, 1);
}
}

for (let i of map.values()) {
cnt *= i + 1;
}

return cnt - 1;
}
22 changes: 22 additions & 0 deletions 연서/week5/level 2/조이스틱.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
function solution(name) {
let answer = 0;
let min_move = name.length - 1;

[...name].map((n, i) => {
answer += Math.min(n.charCodeAt() - 65, 91 - n.charCodeAt());
let idx = i + 1;

// 연속되는 A의 개수 count
while (idx < name.length && name[idx] === "A") {
idx++;
}

min_move = Math.min(
min_move,
i * 2 + name.length - idx,
i + 2 * (name.length - idx)
);
});

return answer + min_move;
}
22 changes: 22 additions & 0 deletions 연서/week5/level 2/할인행사.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
function solution(want, number, discount) {
var answer = 0;

// Map 자료구조로 할인 품목과 원하는 품목 일치 확인 로직
const isMatch = (arr) => {
// 할인 품목과 원하는 제품이 일치하는지 확인하는 함수
var map = new Map(); // 매번 map을 초기화 해준다.
arr.forEach((v) => map.set(v, (map.get(v) || 0) + 1)); // 할인 품목들을 map에 셋팅한다.
for (let i = 0; i < want.length; i++) {
if (map.get(want[i]) !== number[i]) return false;
} // 원하는 품목의 수량과 할인 품목이 일치하지 않으면 false
return true; // 일치하면 true를 리턴한다
};

for (let j = 0; j <= discount.length - 10; j++) {
var arr = discount.slice(j, j + 10); // 10일동안 할인이 되므로(회원 자격 부여) 10개씩 배열을 잘라준다.
if (isMatch(arr)) {
answer++;
}
}
return answer;
}