본문 바로가기

codekata12

[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.
[Algorithm 010] JS - moreThanHalf Q. 숫자로 이루어진 배열인 nums를 인자로 전달합니다. 숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요. 예를 들어, nums = [3,2,3] return 3 nums = [2,2,1,1,1,2,2] return 2 조건 : nums 배열의 길이는 무조건 2개 이상 A. 처음 답 function mortThanHalf (nums) { let obj = {}; nums.forEach((x)=>{ obj[x] = (obj[x] || 0)+1; }) const value = Object.values(obj).sort((a,b) => {return b - a})[0]; const max = Object.keys(obj).filter((a)=>obj[a]===v.. 2021. 10. 2.
[Algorithm 009] JS - romanToNum Q. 로마자에서 숫자로 바꾸기 1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환 Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됨 III = 3 XII = 12 XXVII = 27 그런데 4를 표현할 때는 IIII가 아니라 IV 뒤의 숫자에서 앞의 숫자를 빼주는 형식 예) 9는 IX I는 V, X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900 처음 접근 법 function romanToNum(s) { const symbolArr= ['I', 'V', 'X', 'L', 'C', 'D', 'M']; const numValue = [1, .. 2021. 9. 27.