전체 글87 [프로그래머스][자바스크립트][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. [프로그래머스][자바스크립트][Level2][카카오] 메뉴 리뉴얼 풀이 /** * 메뉴리뉴얼.js * https://programmers.co.kr/learn/courses/30/lessons/72411?language=javascript */ function solution(orders, course) { const answer = []; const orderMap = course.reduce((obj, num) => { obj[num] = { max: 0, orderComb: {}}; return obj; }, {}); course.forEach((num) => { orders.forEach((order) => { getCombinations(order.split(""), num).forEach((orderCombinated) => { const val = orde.. 2022. 2. 14. [프로그래머스][자바스크립트][Level1][카카오] 비밀 지도 풀이 /** * 비밀지도.js * https://programmers.co.kr/learn/courses/30/lessons/17681?language=javascript */ function solution(n, arr1, arr2) { let answer = new Array(n).fill(null); return answer.map((num, idx) => { let binary = (arr1[idx] | arr2[idx]).toString(2); binary = binary.padStart(n, 0); binary = binary.replace(/1/g, '#'); return binary.replace(/0/g, ' '); }); } Topic - 비트 연산 OR 비트 연산을 통해 나온 결과 값.. 2022. 2. 13. [프로그래머스][자바스크립트][Level1][카카오] 다트 게임 풀이 /** * 다트게임.js * https://programmers.co.kr/learn/courses/30/lessons/17682 */ function solution(dartResult) { let answer = []; const regexp = /(\d+)[S|D|T][*|#]?/g; const darts = Array.from(dartResult.matchAll(regexp)).map((val) => val[0]); for (let i = 0; i < darts.length; i++ ) { let point = parseInt(darts[i].match(/(\d+)/)[0]); let bonus = darts[i].match(/[S|D|T]/)[0]; let option = darts[i]... 2022. 2. 11. [프로그래머스][자바스크립트][Level1][카카오] 신고 결과 받기 풀이 /** * 신고결과받기.js * https://programmers.co.kr/learn/courses/30/lessons/92334 */ function solution(id_list, report, k) { const id_report = id_list.reduce((obj, id) => { obj[id] = { reportList: new Set([]), reported: 0 } return obj; }, {}); report.forEach((value) => { const [userId, reportedId] = value.split(" "); if (!id_report[userId]["reportList"].has(reportedId)) { id_report[userId]["reportLi.. 2022. 2. 11. [백준][자바스크립트][Silver4] 1920 수 찾기 Binary Search 풀이 var fs = require('fs'); var input = fs.readFileSync('/dev/stdin').toString().trim().split("\n"); const N = parseInt(input[0]), n = input[1].split(" ").map((num) => parseInt(num)).sort((a, b) => a - b); const M = parseInt(input[2]), m = input[3].split(" ").map((char) => parseInt(char)); let result = []; const binarySearch = (arr, start, end, val) => { if (start > end) return fals.. 2022. 1. 18. [백준][자바스크립트][Silver4] 10773 제로 풀이 /** * 제로 * 10773.js * https://www.acmicpc.net/problem/10773 * 스택 */ const [K, ...n] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const stk = []; for (let i = 0; i acc + num, 0)); 스택 관련 문제로 해결법은 간단하다. 0일 때 pop 아닐 때 push 해주면 된다. no.. 2022. 1. 18. 이전 1 2 3 4 5 다음