본문 바로가기

D.evelop [CS]/Algorithm34

[Algorithm 018] JS - 완주하지 못한 선수 (Level 01) 문제 출처 : 프로그래머스 prorammers - 완주하지 못한 선수 (링크) 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. A. 처.. 2021. 11. 4.
[Algorithm 017] JS - 숫자 문자열과 영단어 (2021 카카오 채용연계형 인턴십) 문제 출처 : 프로그래머스 prorammers - 2021 카카오 채용연계형 인턴십 문제 (링크) 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight" 234567 → "23four5six7" 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같.. 2021. 11. 3.
[Algorithm 016] JS - Bubble Sort 버블정렬 ✅ Bubble Sort (버블 정렬) 인접한 두 개의 데이터를 비교해 정렬 맨 앞의 데이터부터 비교 진행 회전 횟수 = 데이터 수 -1 comparisons = N - 1 O(n²) 구현하기엔 쉽지만 효율성이 가장 떨어짐 정렬할 배열 : [ 8, 5, 6, 2, 4 ] 데이터 갯수 : 5개, 회전 수 :4회전 1회전) [ 8, 5, 6, 2, 4 ] 1swap : 5, 8, 6, 2, 4 2swap : 5, 6, 8, 2, 4 3swap : 5, 6, 2, 8, 4 4swap : 5, 6, 2, 4, 8 ❗️ 결과 1회전 후 제일 큰 수가 뒤로간다. ❗️ 즉, 1회전마다 끝 값부터 정렬이 된다. 2회전) [ 5, 6, 2, 4, 8 ] 1swap : 5, 6, 2, 4, 8 2swap : 5, 2, 6.. 2021. 11. 2.
[Algorithm 015] JS - maxProfit Q. prices는 배열이며, 각 요소는 매일의 주식 가격입니다. 만약 한 번만 거래할 수 있다면 = 사고 팔 수 있다면, 제일 큰 이익은 얼마일까요? 설명: 2일(가격=1)에 샀다가 5일(가격=6)에 사는 것이 6-1이라 제일 큰 수익 7-1=6 은 안 되는거 아시죠? 먼저 사야 팔 수 있습니다. Input: [7,1,5,3,6,4] Output: 5 설명: 여기서는 매일 가격이 낮아지기 때문에 거래가 없습니다. 그래서 0 Input: [7,6,4,3,1] Output: 0 A. 답 const maxProfit = prices => { const arr = []; for ( i = 0 ; i < prices.length ; i++ ){ for ( j = 1 ; j < prices.length ; j++.. 2021. 10. 12.
[Algorithm 014] JS - factorial Q. 재귀를 사용하여 팩토리얼(factorial)을 구하는 함수를 구현해주세요. 팩토리얼이란 1에서부터 n까지의 정수를 모두 곱한것을 말합니다. 1! = 1 2! = 1 * 2 5! = 1 * 2 * 3 * 4 * 5 A. 답 const factorial = n => { if( n === 0 ){ return 1; } return n * factorial(n-1); } factorial(3) // 6 if 를 적지 않았다가 RunJS가 뻗어버렸다. 재귀함수는 자신을 계속 호출하므로 이를 중단시키는 특정 조건문이 반드시 하나 이상 들어가야한다. 이것을 Base case(=Termination case)라고 한다. 마지막에 1을 반환하는 이유 : 종료 값을 반환할 때 값에 지장을 주지 않기 위해 1을 곱한다.. 2021. 10. 9.
[Algorithm 013] JS - complexNumberMultiply Q. 두 개의 input에 복소수(complex number)가 string 으로 주어집니다. 복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다. input으로 받은 두 수를 곱해서 반환해주세요. 반환하는 표현도 복소수 형태의 string 이어야 합니다. 복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요. (제곱 표현이 안 되어 i의 2제곱을 (i^2)라고 표현했습니다.) input은 항상 a+bi 형태입니다. output도 a+bi 형태로 나와야 합니다. 예) Input: "1+1i", "1+1i" Output: "0+2i" (1 + i) * (1 + i) = 1 + i + i + i^2 = 2i 2i를 복소수 형태로 바꾸면 0+2i. Input: "1+-.. 2021. 10. 6.
[Algorithm 012] JS - reverseString Q. 문자로 구성된 배열을 input으로 전달하면, 문자를 뒤집어서 return 해주세요. 새로운 배열을 선언하면 안 됩니다. 인자로 받은 배열을 수정해서 만들어주세요. A. 답 const reverseString = s => { return s.reverse() }; reverseString(["h","e","l","l","o"]) //[ 'o', 'l', 'l', 'e', 'h' ] 2021. 10. 5.
[Algorithm 011] JS - topK Q. nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요. nums = [1,1,1,2,2,3] k = 2 return [1,2] nums = [1] k = 1 return [1] A. 답 nums = [1,1,2,2,2,3]; k = 2; function topK(nums, k) { const obj = {}; nums.forEach((x) => { if(obj[x]) { obj[x] = obj[x] + 1; }else{ obj[x] = 0 + 1; } }); let arr = Object.values(obj).sort((a, b) => b - a).slice(0, k); const result = []; for(i = 0; i < arr.length;i++.. 2021. 10. 3.