목록알고리즘 (11)
Knowledge Map
모듈러 곱셈이라는 것을 처음알게 되었다. 잊지 않도록 기록해 놓는다. 출처 : 칸 아카데미 모듈러 연산의 곱셈 성질 (A * B) % C = (A % C) * (B % C) % C예제 4의 8승을 7로 나누었을 때의 나머지는? (4 ** 4) ** 2 = 256 * 256 => {(256 % 7) * (256 % 7) % 7} = (4 * 4 % 7) = (4 ** 8 % 7) = 2좀더 자세한 내용은 칸 아카데미에서 볼 수 있다.문제 : 위의 법칙을 이용해서 4 ** 123456789123456789123456789123456789123456789 를 100000000000710000000000071000000000007 로 나눈 나머지를 구하시오. 해답 12345678const calculate = ..
하나의 배열중 1개만 존재하는 하나의 숫자는 찾는 것은 XOR로 찾아내면 된다.하지만 2개가 존재할 경우에는 어떻게 찾아야 할까? 이것도 XOR로 찾아내면 된다. 단, 2번의 loop가 필요하다. /* 1개 존재하는 숫자가 1개 있을 경우 */var arr1 = [1,3,2,4,1,3,2,4,20]console.log(arr1.reduce( (p,a)=>p^a, 0)); // 20 /* 1개 존재하는 숫자가 2개 있을 경우 */var arr2 = [1,3,2,4,7,1,3,2,4,10];console.log(arr2.reduce( (p,a)=>p^a, 0)); // 13이나온다. 답이 아님cs 1개 짜리 숫자 2개가 xor연산이 되어버린다. 위의 예시를 보자면 7 ^ 10 = 13 7 = 이진수 1111..
문제 1 X 1 사이즈의 블럭을 보드를 보고 쌓는다. 보드는 H X W 이며 H는 높이, W는 너비이다.// 예를 들어 3X3 보드가 있다면 아래와 같이 한다. 1 3 4 2 2 3 1 2 4 보드위에 적힌 숫자를 보고 그만큼의 블럭을 쌓는 것이다.1 X 1 X 1 일 경우에 표면적은 면적 1짜리가 6면이므로 6이다. 각각의 블럭들은 1 X 1 블럭으로 할 경우 좌표 (i, j) 로 나타낼수 있다. 각 블록은 Aij로 나타낼 수 있다. 좀더 자세한 문제내용은 위의 pdf를 참고하면 된다.조건1 {temp += Math.abs(p-a); return a;},0); temp += one[one.length-1]; result += temp; result -= one.reduce( (p,a,i) => p + ..
문제 [여기]주어진 문자열에 대해서 'hackerrank' 문자의 알파벳이 들어있는지를 확인하면 된다. 단, h, a, c, k, e, r, r, a, n, k 각 문자는 자신보다 앞에 있는 문자보다 더 먼저 나올수 없다. 즉 harankcker 이렇게 되면 없다고 봐야 한다. 순차적으로 각 알파벳이 주어진 문자열에 존재하는지를 확인하면 되는 문제이다. 즉 'haackkerrank' 이렇게 되면 맞는것, 'hackkkerankk' 이러면 r이 하나 부족하기 때문에 아닌게 되는 것이다. 맞으면 'YES' 를, 아니면 'NO' 를 반환하면 된다. 풀이const a = str => { const txt = 'hackerrank'; let j = 0, cnt = 0; for(let i = 0; i
문제 [여기]중복된 문자열을 2개씩 지우고 가장 줄여진 문자열을 반환하는 함수를 만드는 문제이다. 예를 들면 문자열 aaabccddd 가 있을 경우 abccddd => abddd => abd 이런식으로 만들면 된다. 삭제되는 문자열의 순서는 상관없다.즉 aabcc가 있다면 aab, bcc 둘다 상관없다. 또한 bddb의 경우 bddb => bb => "" 가 된다. 만약 문자열이 없다면 Empty String을 반환하면 된다. 풀이// 실행 함수const super_reduced_string = s => A(s) || 'Empty String'; // 문자열 체크 및 삭제해주는 함수const A = str => { for(let i = 1; i
문제는 영어로 되어 있는데 내맘대로 해석을 했다. 원문은 [여기] 참조하면 된다.문제a라는 배열의 최소공배수를 가지고 b라는 배열의 최소값에 이르기 까지 총 개수가 몇개인지 구하시오.예를 들어서 a = [2, 4] 이고 b = [8, 16, 24] 이면 값은 2가 되는데 a 배열의 최소공배수는 4이고 b의 최소값이 8까지는 4, 8 이기 때문에 총 값이 2이다.풀이 // getTotalX( [2,4], [8, 16, 24] ); 이렇게 동작시키는 함수const getTotalX =(a, b) => calculateCommonDenominator(LCM(a), b); // a의 최소공배수(lcm)를 가지고 arr의 최소값까지의 갯수를 구한다.const calculateCommonDenominator = (..
달팽이 모양으로 배열을 만들고 그것을 1차원 배열로 반환하는 문제이다. 이것을[[1,2,3],[8,9,4],[7,6,5]] 이런식으로 바꾸는 것이다.[1,2,3,4,5,6,7,8,9] 1234567891011121314151617function snail(array) { if(array.length 0) { switch(check) { case 0: result.push(...array.shift()); break; case 1: for(var i = 0; i -1; i--) result.push(array[i].shift()); break; } check = check > 3 ? 0 : check+1; } return result;}Colored by Color Scriptercs
https://www.codewars.com/kata/two-arrays-zero-rows-and-zero-columns 자세한 문제 및 테스트는 위의 주소에 가서 하면 된다. 문제 자체는 단순하다. 2개의 2차원 배열을 주고 그 배열의 합의 결과로 나오는 배열에서 내부 값이 전부 0인 행과 열의 갯수을 구하면 된다. 처음에는 별생각 없이 2개의 배열의 합으로 나오는 배열을 하나 만든 다음에 거기서 0을 체크하는 방식으로 했다. 그렇게 만들어서 테스트를 했더니... 너무 느린 코드라고 피드백이 왔다. 그래서 체크 항목을 거의 없다 시피해서 했는데도 느리다고 나왔다. 결국 두 배열의 합으로 만들어지는 배열과 관련된 로직이 느리다는 이야기였다. 두 배열의 합으로 만들어지는 배열 생성로직을 삭제하고, 두 배열..
카카오 모의 테스트 4번, 5번 문제 두 문제 다 동일한 방식으로 문제를 풀면 된다.이제 6번 문제 부터 살살 풀어봐야 겠다. 4번 문제 1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.) 예를 들어 12340111111111110010가 있다면 가장 큰 정사각형은 12340111111111110010가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다. 코드 풀이1234567891011121314151617181920212223242526272829303132function solutio..