Skip to content
16 changes: 16 additions & 0 deletions 도윤/week3/[Lv 1]AdjacentSameLetter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//Lv 1. 가장 가까운 같은 글자 - 연습문제
function solution(s) {
const letters = [],
answer = [];

s.split("").forEach((elm, idx) => {
if (!letters.includes(elm)) {
answer.push(-1);
letters.push(elm);
} else {
answer.push(idx - letters.lastIndexOf(elm));
letters.push(elm);
}
});
return answer;
}
14 changes: 14 additions & 0 deletions 도윤/week3/[Lv 1]Knum.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//Lv 1. K번째수 - 정렬
function solution(array, commands) {
let res = [],
tmp = [];
let start = 0,
end = 0;
commands.forEach((elm) => {
start = elm[0] - 1;
end = elm[1] - 1;
tmp = array.slice(start, end + 1).sort((a, b) => a - b);
res.push(tmp[elm[2] - 1]);
});
return res;
}
10 changes: 10 additions & 0 deletions 도윤/week3/[Lv 2] MakeMinimum.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Lv 2. 최솟값 만들기 - 연습문제
function solution(A, B) {
let answer = 0;
A.sort((a, b) => b - a);
B.sort((a, b) => a - b);
for (let i = 0; i < A.length; i++) {
answer += A[i] * B[i];
}
return answer;
}
12 changes: 12 additions & 0 deletions 도윤/week4/[Lv 1] 2016.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//Lv 1. 2016년 - 연습문제
function solution(a, b) {
const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
const lastDay = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let dayCnt = 0;
let daysIdx = 5; //1월 1일이 금요일이기 때문에 금요일 idx부터 시작

for (let i = 1; i <= a; i++) {
i === a ? (dayCnt += b) : (dayCnt += lastDay[i - 1]);
}
return days[(dayCnt + daysIdx - 1) % 7];
}
20 changes: 20 additions & 0 deletions 도윤/week4/[Lv 1] Fruits.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Lv 1. 과일장수 - 연습문제
function solution(k, m, score) {
let box = [];
let price = 0,
answer = 0;

if (score.length < m) {
return 0;
}

score.sort((a, b) => a - b);

while (score.length >= m) {
box = score.splice(score.length - m, m);
price = m * box[0];
answer += price;
}

return answer;
}
24 changes: 24 additions & 0 deletions 도윤/week4/[Lv 1] SecretMap.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/* Lv 1. [1차] 비밀지도 - 2018 KAKAO BLIND RECRUITMENT
배열 속 주어진 수를 모두 2진수로 변환
변환한 2진수 중 모두 0일 때만 0 -> 공백 (하나라도 1이면 벽'#' 출력)
*/
function solution(n, arr1, arr2) {
let binary1 = [],
binary2 = [];
let answer = "";
let res = [];
arr1.forEach((elm) => binary1.push(elm.toString(2).padStart(n, 0)));
arr2.forEach((elm) => binary2.push(elm.toString(2).padStart(n, 0)));
for (let i = 0; i < n; i++) {
answer = "";
for (let j = 0; j < n; j++) {
if (binary1[i][j] === "0" && binary2[i][j] === "0") {
answer += " ";
} else {
answer += "#";
}
}
res.push(answer);
}
return res;
}
24 changes: 24 additions & 0 deletions 도윤/week4/[Lv 1] SplitString.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Lv 1. 문자열 나누기 - 연습문제
function solution(s) {
let curChar = "";
let same = 0,
diff = 0,
cnt = 0;

for (let c of s) {
curChar === "" ? (curChar = c) : null;
curChar === c ? same++ : diff++;

if (same === diff) {
cnt++;
same = diff = 0;
curChar = "";
}
}

if (curChar.length > 0) {
cnt++;
}

return cnt;
}
25 changes: 25 additions & 0 deletions 도윤/week4/[Lv 2] ExpressNumber.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Lv 2. 숫자의 표현 - 연습문제

// 나의 풀이 (효율성 겁사 통과 X)
function solution(n) {
let cnt = 0;
for (let i = 1; i <= n; i++) {
let sum = 0;
for (let j = i; j <= n; j++) {
sum += j;
if (sum >= n && sum === n) {
cnt++;
}
}
}
return cnt;
}

/* 참고할 풀이 : 주어진 자연수를 연속되는 자연수들의 합으로 표현할 수 있는 방법의 수는 주어진 자연수의 약수 중에서 홀수인 수의 개수와 같다 */
function solution(n) {
let cnt = 0;
for (let i = 1; i <= n; i++) {
n % i === 0 && i % 2 === 1 ? cnt++ : null;
}
return cnt;
}
15 changes: 15 additions & 0 deletions 도윤/week4/[Lv 2]BinaryConversion.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//Lv 2. 이진 변환 반복하기 - 월간 코드 챌린지 시즌1
function solution(s) {
let len = 0,
removed = 0,
times = 0;

while (s.length > 1) {
len = s.length;
s = s.split("0").join("");
removed += len - s.length;
times++;
s = s.length.toString(2);
}
return [times, removed];
}
15 changes: 15 additions & 0 deletions 도윤/week5/[Lv 1] MemoryScore.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Lv 1. 추억 점수 - 연습문제
function solution(name, yearning, photo) {
let missingScore = [];
let tmpScr = 0;
for (let i = 0; i < photo.length; i++) {
tmpScr = 0;
for (let j = 0; j < photo[i].length; j++) {
if (name.includes(photo[i][j])) {
tmpScr += yearning[name.indexOf(photo[i][j])];
}
}
missingScore.push(tmpScr);
}
return missingScore;
}
13 changes: 13 additions & 0 deletions 도윤/week5/[Lv 1] SecretCode.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Lv 1. 둘만의 암호 - 연습문제
function solution(s, skip, index) {
let answer = "";
const alphArr = Array(26)
.fill()
.map((v, i) => String.fromCharCode(i + 97))
.filter((elm) => !skip.includes(elm));
s.split("").forEach((elm, idx) => {
let newIdx = (alphArr.indexOf(elm) + index) % alphArr.length;
answer += alphArr[newIdx];
});
return answer;
}
23 changes: 23 additions & 0 deletions 도윤/week5/[Lv 1] Test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Lv 1. 모의고사 - 완전탐색
function solution(answers) {
const sol1 = [1, 2, 3, 4, 5],
sol2 = [2, 1, 2, 3, 2, 4, 2, 5],
sol3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
let cnt1 = 0,
cnt2 = 0,
cnt3 = 0;
const answer = [];

answers.forEach((elm, idx) => {
if (sol1[idx % sol1.length] === elm) cnt1++;
if (sol2[idx % sol2.length] === elm) cnt2++;
if (sol3[idx % sol3.length] === elm) cnt3++;
});

const max = Math.max(cnt1, cnt2, cnt3);
if (cnt1 === max) answer.push(1);
if (cnt2 === max) answer.push(2);
if (cnt3 === max) answer.push(3);

return answer;
}
13 changes: 13 additions & 0 deletions 도윤/week5/[Lv 2] Fibonacci.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Lv 2. 피보나치 수 - 연습문제
function solution(n) {
let add1 = 0,
add2 = 1,
sum = 0,
mod = 0;
for (let i = 2; i <= n; i++) {
sum = (add1 + add2) % 1234567;
add1 = add2;
add2 = sum;
}
return sum;
}
22 changes: 22 additions & 0 deletions 도윤/week5/[Lv 2] NextBigNumber.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Lv 2. 다음 큰 숫자 - 연습문제
function solution(n) {
const findCnt = (num) => {
return num
.toString(2)
.split("")
.filter((elm) => elm === "1").length;
};

let start = n + 1;
let oneCnt = 0;

while (true) {
oneCnt = findCnt(start);
if (oneCnt === findCnt(n)) {
break;
}
start++;
}

return start;
}