diff --git "a/\353\217\204\354\234\244/week3/[Lv 1]AdjacentSameLetter.js" "b/\353\217\204\354\234\244/week3/[Lv 1]AdjacentSameLetter.js" new file mode 100644 index 0000000..2b86a5f --- /dev/null +++ "b/\353\217\204\354\234\244/week3/[Lv 1]AdjacentSameLetter.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week3/[Lv 1]Knum.js" "b/\353\217\204\354\234\244/week3/[Lv 1]Knum.js" new file mode 100644 index 0000000..4ca5f98 --- /dev/null +++ "b/\353\217\204\354\234\244/week3/[Lv 1]Knum.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week3/[Lv 2] MakeMinimum.js" "b/\353\217\204\354\234\244/week3/[Lv 2] MakeMinimum.js" new file mode 100644 index 0000000..a7a84d6 --- /dev/null +++ "b/\353\217\204\354\234\244/week3/[Lv 2] MakeMinimum.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week4/[Lv 1] 2016.js" "b/\353\217\204\354\234\244/week4/[Lv 1] 2016.js" new file mode 100644 index 0000000..50530ed --- /dev/null +++ "b/\353\217\204\354\234\244/week4/[Lv 1] 2016.js" @@ -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]; +} diff --git "a/\353\217\204\354\234\244/week4/[Lv 1] Fruits.js" "b/\353\217\204\354\234\244/week4/[Lv 1] Fruits.js" new file mode 100644 index 0000000..f0fe76d --- /dev/null +++ "b/\353\217\204\354\234\244/week4/[Lv 1] Fruits.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week4/[Lv 1] SecretMap.js" "b/\353\217\204\354\234\244/week4/[Lv 1] SecretMap.js" new file mode 100644 index 0000000..2a424af --- /dev/null +++ "b/\353\217\204\354\234\244/week4/[Lv 1] SecretMap.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week4/[Lv 1] SplitString.js" "b/\353\217\204\354\234\244/week4/[Lv 1] SplitString.js" new file mode 100644 index 0000000..d671835 --- /dev/null +++ "b/\353\217\204\354\234\244/week4/[Lv 1] SplitString.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week4/[Lv 2] ExpressNumber.js" "b/\353\217\204\354\234\244/week4/[Lv 2] ExpressNumber.js" new file mode 100644 index 0000000..b1ba26b --- /dev/null +++ "b/\353\217\204\354\234\244/week4/[Lv 2] ExpressNumber.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week4/[Lv 2]BinaryConversion.js" "b/\353\217\204\354\234\244/week4/[Lv 2]BinaryConversion.js" new file mode 100644 index 0000000..23c2d77 --- /dev/null +++ "b/\353\217\204\354\234\244/week4/[Lv 2]BinaryConversion.js" @@ -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]; +} diff --git "a/\353\217\204\354\234\244/week5/[Lv 1] MemoryScore.js" "b/\353\217\204\354\234\244/week5/[Lv 1] MemoryScore.js" new file mode 100644 index 0000000..0d2a3ad --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 1] MemoryScore.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week5/[Lv 1] SecretCode.js" "b/\353\217\204\354\234\244/week5/[Lv 1] SecretCode.js" new file mode 100644 index 0000000..518e86d --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 1] SecretCode.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week5/[Lv 1] Test.js" "b/\353\217\204\354\234\244/week5/[Lv 1] Test.js" new file mode 100644 index 0000000..d6b0747 --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 1] Test.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week5/[Lv 2] Fibonacci.js" "b/\353\217\204\354\234\244/week5/[Lv 2] Fibonacci.js" new file mode 100644 index 0000000..b86ff59 --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 2] Fibonacci.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week5/[Lv 2] NextBigNumber.js" "b/\353\217\204\354\234\244/week5/[Lv 2] NextBigNumber.js" new file mode 100644 index 0000000..fb322cd --- /dev/null +++ "b/\353\217\204\354\234\244/week5/[Lv 2] NextBigNumber.js" @@ -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; +} diff --git "a/\353\217\204\354\234\244/week6/[Lv 1] FoodFight.js" "b/\353\217\204\354\234\244/week6/[Lv 1] FoodFight.js" new file mode 100644 index 0000000..55d2004 --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 1] FoodFight.js" @@ -0,0 +1,8 @@ +// Lv 1. 푸드 파이트 대회 - 연습문제 +function solution(food) { + let perFood = []; + for (let i = 1; i < food.length; i++) { + perFood.push(i.toString().repeat(Math.floor(food[i] / 2))); + } + return perFood.join("") + "0" + perFood.reverse().join(""); +} diff --git "a/\353\217\204\354\234\244/week6/[Lv 1] Noncompletion.js" "b/\353\217\204\354\234\244/week6/[Lv 1] Noncompletion.js" new file mode 100644 index 0000000..494f94b --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 1] Noncompletion.js" @@ -0,0 +1,30 @@ +// Lv 1. 완주하지 못한 선수 - 해시 +function solution(participant, completion) { + let answer = ""; + + participant.sort(); + completion.sort(); + + for (let i = 0; i < participant.length; i++) { + if (participant[i] !== completion[i]) { + answer = participant[i]; + break; + } + } + return answer; +} + +// 첫번째 풀이 - 효율성 검사 통과 X +// function solution(participant, completion){ +// let idx = -1; +// let answer = ""; +// participant.forEach((elm)=> { +// if(completion.includes(elm)){ +// idx = completion.indexOf(elm); +// completion.splice(idx, 1); +// }else{ +// answer = elm; +// } +// }) +// return answer; +// } diff --git "a/\353\217\204\354\234\244/week6/[Lv 1] Paint.js" "b/\353\217\204\354\234\244/week6/[Lv 1] Paint.js" new file mode 100644 index 0000000..6b550d8 --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 1] Paint.js" @@ -0,0 +1,12 @@ +// Lv 1. 덧칠하기 - 연습문제 +function solution(n, m, section) { + let paint = 0, + answer = 0; + section.forEach((elm) => { + if (elm > paint) { + paint = elm + (m - 1); + answer++; + } + }); + return answer; +} diff --git "a/\353\217\204\354\234\244/week6/[Lv 1] Ranking .js" "b/\353\217\204\354\234\244/week6/[Lv 1] Ranking .js" new file mode 100644 index 0000000..1313ad2 --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 1] Ranking .js" @@ -0,0 +1,12 @@ +// Lv 1. 명예의 전당 (1) - 연습문제 +function solution(k, score) { + let rank = [], + answer = []; + + for (let i = 0; i < score.length; i++) { + rank.push(score[i]); + rank = rank.sort((a, b) => b - a).slice(0, k); + answer.push(Math.min(...rank)); + } + return answer; +} diff --git "a/\353\217\204\354\234\244/week6/[Lv 2] Bracket.js" "b/\353\217\204\354\234\244/week6/[Lv 2] Bracket.js" new file mode 100644 index 0000000..5c5f379 --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 2] Bracket.js" @@ -0,0 +1,25 @@ +// Lv 2. 올바른 괄호 - 스택/큐 +function solution(s) { + const stack = []; + + for (let i = 0; i < s.length; i++) { + stack[stack.length - 1] === "(" && s[i] === ")" + ? stack.pop() + : stack.push(s[i]); + } + + return stack.length === 0 ? true : false; +} + +/* +효율성 검사 통과 풀이 +function solution(s){ + const stack = []; + + for(let i = 0; i < s.length; i++){ + (stack[stack.length-1] === "(" && s[i] === ")") ? stack.pop() : stack.push(s[i]); + + } + + return !stack.length; +} */ diff --git "a/\353\217\204\354\234\244/week6/[Lv 2] PairEliminate.js" "b/\353\217\204\354\234\244/week6/[Lv 2] PairEliminate.js" new file mode 100644 index 0000000..401608e --- /dev/null +++ "b/\353\217\204\354\234\244/week6/[Lv 2] PairEliminate.js" @@ -0,0 +1,13 @@ +// Lv 2. 짝지어 제거하기 - 2017 탑스타운 +function solution(s) { + //stack 사용 + const stack = []; + for (let i = 0; i < s.length; i++) { + if (stack[stack.length - 1] !== s[i]) { + stack.push(s[i]); + } else { + stack.pop(); + } + } + return stack.length === 0 ? 1 : 0; +}