프로그래머스52 [프로그래머스][자바스크립트][Level2] 영어 끝말잇기 풀이 /** * 영어끝말잇기.js * https://programmers.co.kr/learn/courses/30/lessons/12981?language=javascript */ function solution(n , words) { const length = words.length + words.length % n; let order = null; for (let i = 1; i < length; i++) { const idx = i % words.length; const beforeWord = words[idx - 1]; const currWord = words[idx]; if (beforeWord[beforeWord.length - 1] !== currWord[0] || words.indexOf(.. 2022. 3. 5. [프로그래머스][자바스크립트][Level2] 숫자의 표현 풀이1 - 효율성 테스트 3, 5 실패 /** * 숫자의표현.js * https://programmers.co.kr/learn/courses/30/lessons/12924?language=javascript */ /** 완전 탐색, 효율성 테스트 3, 5 실패 */ function solution(n) { var answer = 0; for (let i = 1; i < Math.ceil(n/2); i++) { let sum = 0; for (let j = i; j n) { break; } } } return answer + 1; } 완전 탐색으로 연속된 값들을 더해서 답이되는 모든 경우를 2중 for문을 통해 확인하는 방식이다. 1에서부터 시작해서 하나씩 시작하는 숫자를 늘려가면서 확인했다. 중간 값보다.. 2022. 3. 3. [프로그래머스][자바스크립트][Level1] 콜라츠 추측 풀이 /** * 콜라츠추측.js * https://programmers.co.kr/learn/courses/30/lessons/12943?language=javascript */ function solution(num) { let count = 0, n = num; while (count 500 ? -1 : count; } function colatzGuess(num) { return num % 2 === 0 ? num /= 2 : (num * 3) + 1; } 문제에 주어진대로 짝수/홀수 일 때를 구분해서 처리해주면된다. 재귀로도 처리가능하나 while로 처리했다. 2022. 2. 28. [프로그래머스][자바스크립트][Level1] 이상한 문자 만들기 풀이 /** * 이상한문자만들기.js * https://programmers.co.kr/learn/courses/30/lessons/12930?language=javascript */ function solution(s) { return s.split(" ").map(makeWeiredStr).join(" "); // 1 } function makeWeiredStr(str) { return str.split("").map((char, idx) => idx % 2 === 0 ? char.toUpperCase() : char.toLowerCase()).join(""); // 2 } 1. s 를 공백 단위로 쪼개서 makeWeiredStr 함수에 넘겨준다. 2. 넘어온 string 의 index 짝/홀 여부를.. 2022. 2. 25. [프로그래머스][자바스크립트][Level2] 피보나치 수 재귀로 풀이 시도 function solution(n) { return fibonacci(n); } const memoization = { 0: 0, 1: 1, 2: 1 } function fibonacci(n) { if (memoization[n] !== undefined) return memoization[n]; const answer = ((fibonacci(n - 1) % 1234567) + (fibonacci(n - 2) % 1234567)) % 1234567; if (memoization[n] === undefined) memoization[n] = answer; return answer; } 주어지는 n의 범위가 2 이상 100,000 이하인 자연수이므로 상당히 범위가 넓어서 Memoizat.. 2022. 2. 25. [프로그래머스][자바스크립트][Level2][카카오] 캐시 풀이 /** * 캐시.js * https://programmers.co.kr/learn/courses/30/lessons/17680?language=javascript */ const MISS = 5, HIT = 1; // 1 function solution(cacheSize, cities) { if (cacheSize === 0) return MISS * cities.length; // 2 let answer = 0; const cache = []; cities .map((city) => city.toLowerCase()) // 3 .forEach((city) => { const cityIdx = cache.indexOf(city); if (cityIdx > -1) { answer += HIT; // .. 2022. 2. 22. [프로그래머스][자바스크립트][Level2][카카오] 괄호 변환 풀이 /** * 괄호변환.js * https://programmers.co.kr/learn/courses/30/lessons/60058?language=javascript * https://philosopherprogrammer.com/101 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다. 3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다. 4. 문자열 u가 "올바른 괄호 문자열"이 아니라면 아래 과정을 수행합니다. .. 2022. 2. 21. [프로그래머스][자바스크립트][Level2][카카오] 뉴스 클러스터링 풀이 /** * 뉴스클러스터링.js * https://programmers.co.kr/learn/courses/30/lessons/17677?language=javascript */ function solution(str1, str2) { const arr1 = sliceByTwo(str1); // 1 const arr2 = sliceByTwo(str2); // 1 return Math.floor(getJaccardSimilarity(arr1, arr2) * 65536); // 2, 3 } function sliceByTwo(str) { const upStr = str.toUpperCase(); const arr = []; for (let i = 0; i < upStr.length - 1; i++) { .. 2022. 2. 20. [프로그래머스][자바스크립트][Level1][카카오] 신규 아이디 추천 풀이 /** * 신규아이디추천.js * https://programmers.co.kr/learn/courses/30/lessons/72410?language=javascript 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다. 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 .. 2022. 2. 19. [프로그래머스][자바스크립트][Level1][카카오] 키패드 누르기 풀이 /** * 키패드누르기.js * https://programmers.co.kr/learn/courses/30/lessons/67256?language=javascript */ function solution(numbers, hand) { let currLeft = "*", currRight = "#"; let answer = ""; numbers.forEach((num) => { const rule = staticRule(num); if (rule) { answer += rule; if (rule === "L") { currLeft = num; } else { currRight = num; } } else { const fromLeft = BFS(graph, currLeft, num); const .. 2022. 2. 19. [프로그래머스][자바스크립트][Level1][카카오] 크레인 인형뽑기 게임 풀이 /** * 크레인인형뽑기게임.js * https://programmers.co.kr/learn/courses/30/lessons/64061?language=javascript */ function solution(board, moves) { const stk = []; let answer = 0; moves.forEach((col) => { for (let i = 0; i 0) { board[i][col - 1] = 0; if (stk.length > 0 && stk[stk.length - 1] === item) { stk.pop(); answer += 2; // 인형 2개가 만나서.. 2022. 2. 19. [프로그래머스][자바스크립트][Level2][카카오] 방금그곡 풀이 /** * 방금그곡.js * https://programmers.co.kr/learn/courses/30/lessons/17683?language=javascript */ function solution(m, musicinfos) { const resultArr = musicinfos.map((info) => { const [start, end, name, scale] = info.split(","); const time = calcTime(start, end); const scaleArr = replaceStr(scale).split(""); const sRepeat = Math.floor(time / (scaleArr.length)); const sRemainder = time % (scaleA.. 2022. 2. 16. 이전 1 2 3 4 5 다음