개발일기
연속부분수열1(Two Pointers Algorithm)
투포인트 알고리즘의 전형적인 문제 ( Two Pointers Algorithm ) : 배열 의 값을 연속으로 구해서 특정 값이 나오는 경우의 수를 구하는 문제 function solution2(m, arr){ let answer=0; // lt는 sum의 값이 let mius=0; // 번위내에 있는걸 축적해서 더한 값 let sum=0; for(let plus=0; plus=m){ sum-=arr[mius++]; if(sum===m) answer++; } } console.log(answer); return answer; } 하나씩(PLUS) 배열의 값을 더해서 누적한다(SUM). 누적된 값(SUM)이 특정 값(M)와 동일하면 카운터(ANSWER) 한다. while : 여기서 누적 된 값(SUM)이 특..
공통원소구하기(Two Pointers Algorithm)
교집합이란? 집합론에서, 두 집합 A와 B의 교집합 A ∩ B는 그 두 집합이 공통으로 포함하는 원소로 이루어진 집합이다. 예를 들어, 두 집합 {★, ●, ◆}, {●, ◆, ♥}의 교집합은 {●, ◆}이다. 두 집합에 교집합을 취하면 아무 원소도 남지 않게 되는 경우도 있다. 공통원소구하기 : 두배열의 교집합구하는문제 //ME function solution(a1 , a2){ const n = a1.length; const m = a2.length; let arr = []; for (let i = 0; i < n; i++) { for (let j = 0; j < m; j++) { if(a1[i] === a2[j]) arr.push(a1[i]); } } let asewer = arr.sort((a,b)..
두 배열 합치기 ( 투 포인트 )
투포인트란? 투 포인터란? 이번 글에서는 Two pointers technique (algorithm)을 설명해보도록 하겠습니다. 일단 이름 그대로 두 가지 포인터를 사용하여 문자열이나 배열(또는 리스트)에서 원하는 값을 찾거나 반복문을 써야 할 때 쓰기 좋은 방식입니다. 두 배열 합치기 : 투포인트 기본 문제 두가지 배열를 순서대로 재배열 시키는 문제 //me function solution(a1 , a2){ let asewer = a1.concat(a2).sort((a,b)=>a -b ) return asewer }; // 강의 function solution2(arr1, arr2){ let answer=[]; let n=arr1.length; let m=arr2.length; let p1=p2=0;..
리엑트 스크립트 버전과 esLint 충돌
react-app으로 react 프로젝트를 생산하면 자동으로 설치 되는 react-script 버전은 4.0.3버전 여기에는 사실 치명적인 오류가 있다. 그r건 esLint와 충돌해 오류가 생기는것 대부분의 다인 프로젝트에서는 코드폼을 맞춰어주는 esLint와 prettier는 기본적이여서 eslint를 사용할수 밖에 없다. 그렇기에 esLint를 버리지 않는 다른 방법을 사용하기로했다. 해외에는 "@babel/core": "^7.13.0"e 추가 하라는 방법과 패키지.js에 esLint를 숨기는 방법도 있었지만 차라리 근본적으로 오류가 생기는 react-script를 업그레이드 하는 방법을 선택했다 왜냐하면 제작사에서 react-script에 버그를 고쳐서 업데이트했다는 소식을 전해 들었기 때문이다. ..
백준 알고리즘 2588번 문제
아직 백준 입력값 작성이 어색해서 입력하다가 오류가 나았다. 문제는 받은 값을 배열로 만들고 map으로 각각 n1 곱해주고 뒤집어서 총합를 추가해서 리턴했다. var fs = require("fs"); const input = require("fs") .readFileSync("/dev/stdin") .toString() .trim() .split("\n"); const n1 = input[0]; const n2 = input[1]; const strNum = [ ...(n2 + "") .split("") .map(el => { return +el * n1; }) .reverse(), n1 * n2, ]; console.log(strNum[0]); console.log(strNum[1]); console..
같은 숫자는 싫어
문제 설명 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 제한사항 배열 arr의 크기 : 1,000,000 이하의 자연수 배열 arr의 원소의 크기 : 0보다 크거나 ..
3진법 뒤집기
문제 설명 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수입니다. function solution(n) { // 1. n으로 받은 수를 3진법으로 바꾸어주고 배열로 바꾸어 역순으로 바꾸어주어서 다시 붙인다. // 2. 여기까지의 값이 spring이 되지만 상관 없이 parseInt로 대입 시켜주면 인식해서 10진법으로 // 리턴해준다. return Number.parseInt(n.toString(3).split('').reverse().join(''), 3) } // 1. x를 받는다. // 2. x를 자릿수를 따로 분리 시키고..
하샤드 수
문제 설명 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. 제한 조건 x는 1 이상, 10000 이하인 정수입니다. 입출력 예 설명 입출력 예 #110의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다. 입출력 예 #212의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다. 입출력 예 #311의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다. 입출력 예 #4..