알고리즘 14

Week3 - Day4 (Javascript)

💬 팀 프로젝트가 시작되니 대부분의 동기들이 프로젝트 작업에 집중해서 코드카타는 뒷전이다.ㅋㅋㅋ 문제 주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요. 원래 있던 숫자의 순서는 바꾸지 말아주세요. (새로운 배열을 생성해서는 안 됩니다.) Input: [0,1,0,3,12] Output: [1,3,12,0,0] 내 Flow for문을 이용하여 배열에서 0을 찾아 꺼낸다. 단, 새로운 배열을 생성하면 안 되기 때문에 splice를 이용하고 기존 배열에 push해준다. 풀이 const moveZeroes = nums => { for(i = nums.length-1; i >= 0; i--){ if(nums[i]===0){ nums.push(nums.splice(i, 1)[0]); } } retur..

Week3 - Day1 (Javascript)

💬 오늘부터 팀 프로젝트가 시작되어 아침 일찍 코드카타를 진행했다. 문제 두 개의 input에 복소수(complex number)가 string 으로 주어집니다. 복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다. input으로 받은 두 수를 곱해서 반환해주세요. 반환하는 표현도 복소수 형태의 string 이어야 합니다. 복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요. (제곱 표현이 안 되어 i의 2제곱을 (i^2)라고 표현했습니다.) 예제1 Input: "1+1i", "1+1i" Output: "0+2i" 설명: (1 + i) * (1 + i) = 1 + i + i + i^2 = 2i 예제2 Input: "1+-1i", "1+-1i" Output: "0..

Week2 - Day5 (Javascript)

💬 코드카타 2주차에서 구글링이나 다른 사람의 도움을 받지 않고 처음으로 짝궁과 고민하여 푼 첫 코드카타... 짝궁이랑 흥분감에 손 떨며 test 결과를 기다렸고... 결과는 성공‼✌🏻 문제 인자인 height는 숫자로 이루어진 배열입니다. 그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다. 아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다. 저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요. 가정 배열의 길이는 2이상입니다. 내 Flow height 배열의 요소는 높이를, 인덱스는 가로 길이를 나타내므로 더블 for문을 돌려 각각의 값을 비교한다. 같은 인덱스를 비교하지 않도록 if문을 설정한다. 비교했을..

Week2 - Day4 (Javascript)

문제 nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요. nums = [1,1,1,2,2,3], k = 2 return [1,2] nums = [1] k = 1 return [1] 풀이 function topK(nums, k) { let obj = {} for (let i in nums) { nums[i] in obj ? obj[nums[i]] += 1 : obj[nums[i]] = 1 } let sorted = Object.keys(obj).sort(function(a, b) { return obj[b] - obj[a] }) return sorted.slice(0, k).map(x => parseInt(x)) }

Week2 - Day3 (Javascript)

문제 s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요. 종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다. 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다. 예를 들어 아래와 같습니다. s = "()" return true s = "()[]{}" return true s = "(]" return false s = "([)]" return false s = "{[]}" return true 내 Flow 각 괄호를 객체로 짝 짓는다. 규칙성을 찾았을 때 열린 괄호와 닫히는 괄호가 옳게 짝지어지려면 홀수번째 인덱스에 오는 열린 괄호는 닫히는 괄호가 짝수번째..

Week2 - Day2 (Javascript)

문제 숫자로 이루어진 배열인 nums를 인자로 전달합니다. 숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요. 예를 들어, nums = [3,2,3] return 3 nums = [2,2,1,1,1,2,2] return 2 가정 nums 배열의 길이는 무조건 2개 이상 내 Flow nums 배열에서 for문으로 각각의 요소가 중복인지 확인한다. split("")을 해야하나, map객체를 써야하나, set객체를 써야하나, filter를 써야하나 고민... 과반수가 넘어야 하기 때문에 nums 배열을 2로 나눈 것보다 length가 더 많아야 한다. 풀이 function moreThanHalf(nums) { // 여기에 코드를 작성해주세요. for (let i=0..

Week2 - Day1 (Javascript)

문제 로마자에서 숫자로 바꾸기 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 내 Flow Symbol과 Value 값을 객체로 만든다. 인자로 받은 s는 string이므로 split(""..

Week1 - Day5 (Javascript)

문제 strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요. 예를 들어 strs = ['start', 'stair', 'step'] return은 'st' strs = ['start', 'wework', 'today'] return은 '' 내 Flow 배열의 요소를 쪼개어 String형으로 변환한다. 더블 for문으로 각 string의 같은 인덱스에서 같은 문자가 나오면 새로운 빈 배열에 push한다. 💬 flow를 생각하고 보니까 배열이 3개인데 그걸 어떻게 한꺼번에 각각의 인덱스를 비교할지... 막혔다. 뇌정지... 풀이 const getPrefix = strs => { let answer = ''; let sortStrs = strs.sort(); if(sortStrs...

Week1 - Day3 (Javascript)

문제 String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요. str: 텍스트 return: 중복되지 않은 알파벳 길이 (숫자 반환) 예를 들어, str = "abcabcabc" return 은 3 => 'abc' 가 제일 길기 때문 str = "aaaaa" return 은 1 => 'a' 가 제일 길기 때문 str = "sttrg" return 은 3 => 'trg' 가 제일 길기 때문 내 Flow String형을 배열로 만들어 쪼갠다. for문으로 같은 문자가 나오면 그 앞까지의 배열을 저장한다. 그 뒤부터 또 for문을 돌리고 또 같은 문자가 나오면 배열을 2에서 나온 배열의 length와 비교해서 더 큰 것을 반환한다. indexOf가 찾는 문자열이..

Week1 - Day2 (Javascript)

문제 reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요. x: 숫자 return: 뒤집어진 숫자를 반환! 예들 들어, x: 1234 return: 4321 x: -1234 return: -4321 x: 1230 return: 321 내 Flow 인자로 받은 x를 숫자에서 문자로 바꾼다. 바꾼 문자를 배열로 쪼갠다. 배열을 뒤집는다. 뒤집은 배열을 다시 문자로 합친다. 단 0이 앞으로 나오면 0을 삭제해야 하고, 음수일 경우 결과값도 음수로 반환해야 한다. 💬 1~4까지는 쉬웠으나, 5번의 조건이 어려웠다. 찾아보니 parseFloat() 메소드와 Math.sign() 메소드에 대해 알게 되었다. parseFloat() 메소드는 주어진 값을 필요한 경우 문자열로 ..