분류 전체보기
[JS] 인사고과
원호의 등수를 알고 싶다면 원호보다 인사고과를 잘 받은 사람들의 수를 세면 된다. 우선 두수의 합이 원호보다 큰 사람들을 가려낸 후, 그 사람들 사이에서 인사고과를 받을 수 없는 사람들을 제외하면 된다. 이게 가능한 이유는 자신보다 합이 적은 사람에 의해서는 인사고과를 받을 수 없기 때문이다. a + b > c+ d 라면 a>c && b>d 일수 없기 때문 function solution(scores) { const ary = [] const [wanhoA,wanhoB] = scores[0] for (let i=0; i wanhoA+wanhoB) ary.push([a,b]) if (a> wanhoA &..
[JS] 연속 펄스 부분 수열의 합
문제 자체는 부분수열의 합을 구하는 방법을 알면 해결할 수 있는 문제이다. 1 , -1 , 1 , -1 ... -1 , 1 , - 1 , 1 ... 해당되는 펄스를 각각 곱한 2개의 수열을 만들어주면 된다. 이어서 dp를 활용해서 부분수열의 합중 가장 큰 값을 가지면 된다. 아래 예시를 보며 생각해보자. 2 3 -6 1 3 -1 2 4 dp[n] 을 n번째에 올 수 있는 가장 최대치의 부분수열의 합이라 생각하고 maxDp[n]을 n번를 무조건 포함한 가장 최대치의 부분수열의 합이라 생각하자. 결국 dp[n] = Math.max(dp[n-1] , maxDp[n]) 이 되게된다. n번째 값이 들어왔을때 이를 포함한 부분수열의 합이 더큰가 아닌가만 확인하면 되는 문제로 바뀐 것이다. maxDp[n]은 아래와 ..
[JS] 아방가르드 타일링
이전 3*n 타일링을 이해했다면?! 이해할만한 문제였다. 가장 중요한 포인트는 이것이다. 세로줄이 한개씩 늘어날때마다 얼만큼의 경우의 수를 찾아야 하는지를 알아야 한다. 편의상 f(1)을 1개를 만들 수 있는 경우의 수라고 생각해보자. f(1) = 1 f(2) = 3 f(3) = 10 우리가 생각할 때 f(4)를 만드는 경우, f(1) * f(3) f(2) * f(2) f(3) * f(1) 위 값들을 다 더하면 된다.. 라고 생각해도 될까? 정답은 아니다 위처럼 나눈다면 f(1) * f(1) * f(1) * f(1) 이런 경우까지 다 고려해야 하며 그중에서 중복되는 값들이 생길 수 있어 계산하기 매우 번거로워진다. 따라서 유니크 타일이란 개념을 도입하면 이를 조금 쉽게 생각할 수 있다. 유니크 타일이란 ..
[JS] 상담원 인원
문제를 처음 딱 읽고 보니 완전탐색이 떠올랐다. 어차피 유형이 최대 5개이니 합이 n이 나오는 5개의 수 조합을 찾으면 되는 문제였다. 몇번 공부했었던 combination을 구하는 로직을 조금 비틀어서 위 수식을 구한 이후에는 시나리오들을 돌려보며 time들을 구하면 되는 문제이다. 어떻게 풀까 하다가 객체를 통해서 문제를 해결하기로 했다. 상담자 객체를 하나 만들어서 상담이 종료되는 시각과 타입이 들어온다. 문제에서 상담원들은 시간순서대로 들어오기 때문에 1. 상담받을수 있는 상담가 중에서 종료 시간이 가장 최근인 상담가를 선택 종료시간이 현재보다 과거라면 지금당장 상담을 받을 수 있기에 상담가의 종료시간을 현재시간 + 상담기간으로 설정 종료시간이 현재보다 미래라면 지금당장 상담 받을 수 없기에 상담..
[JS] 에어컨
쉽지 않은 문제였다... dp로 풀면 뭔가 될꺼 같은데 1시간정도 넘게 고민을 해도 뭔가나올듯 말듯 했다. 그러다가 힌트만 참고하잔 생각으로 질문게시판을을 봤는데 dp를 2차원으로 쓴다는 말만 보고 아이디어를 얻고 혼자 생각해보았다. 오랜만에 난이도있는 dp문제를 접해서인지 dp를 2차원으로 둘 생각을 못했다!! 최대 1000초의 시간이 주어지고 온도도 50도 안으로 오니 가능했었던 문제였다. 만약 첫번째 예시를 통해서 dp를 채우면 아래와 같이 나와야 한다. N은 편의상 INF중에서 N만 쓴것으로 무한대를 의미한다! 손님이 없다면 모든 경우의 수를 보고 있다면 희망온도 안에서만 경우의 수를 따지면 된다. 이때 생각해야할 것이있다. 1. 에어컨을 1도 올리는 경우 2. 에어컨을 1도 내리는 경우 3. 에..
[JS] DeepDive(49) Babel과 Webpack을 이용한 ES6+/ES.NEXT 개발 환경 구축
크롬,사파이 , 파이어폭스 , 엣지 등 대부분 브라우저는 ES6을 지원한다. IE 11의 ES6 지원률을 매우 낮으며 매년 새롭게 도입되는 ES6+ 버전이나 제안단계의 ES제안 상양은 브라우저에 따라서 지원율이 제각각이다. 즉 ES6+와 ES.NEXT의 ECMAScript사양을 활용하려면 최신 사양으로 작성된 코드를 때에 따라서는 구형 브라우저에서도 동작시키기 위한 환경 구축이 필요하다. 대부분 프로젝트가 모듈을 사용하므로 모듈 로더도 필요한데 ESM은 대부분 브라우저에서 사용할 수 있긴 하지만 몇가지 이유로 별도의 모듈 로더를 사용하는것이 일반적이다. 1. 구형브라우저에서 ESM을 지원하지 않음 2. ESM을 사용해도 트랜스파일링이나 번들링이 필요함 3. ESM이 아직 지원하지 않는 기능이 있으며 해결..