FrontEnd
[JS] 피로도
요즘 완전탐색으로 풀만한 문제들을 해결할때 순열,조합을 연습할 겸 써보고 있다. 근데 사실 해당 문제는 순열,조합보다는 그냥 dfs와 visted 배열을 사용했으면 훨씬 빠르게 풀 수 있을거 같긴 하다. 문제풀이 자체는 조합으로 갈수 있는 던전의 모든 경우의 수를 구한 이후, 각 경우의 수마다 통과할 수 있는 라운드 수를 구해서 더해주었다. 메인 함수 자체의 로직은 되게 간결해졌지만.. dfs로 처리한다면 갈 수 없는 던전의 경우의 수를 상당히 걸러낼 수 있는데 조합으로는 모든 경우의 수를 탐색해보기 때문에 좋은 방식은 아닌 것 같다. 문제마다 필요한 방법을 적절히 고려해보는 습관을 들일 필요가 있을 것 같다. const getPermutation = (arr,n) => { const ret = [] i..
[JS] 옵셔널 체이닝 ?.
옵셔널 체이닝 ?. 은 비교적 스펙에 추가된지 얼마 안된 문법으로, 구식 브라우저에 사용하기 위해서는 폴 리필이 필요한 문법이다. let user = {}; // 주소 정보가 없는 사용자 alert(user.address.street); // TypeError: Cannot read property 'street' of undefined 위와같은 경우에, user의 address정보가 없기 때문에 자바스크립트에서 오류를 내보내게 된다. 그 외에 아래와 같이 브라우저에 없는 요소를 접근하려 할때도 오류가 발생하곤한다. // querySelector(...) 호출 결과가 null인 경우 에러 발생 let html = document.querySelector('.my-element').innerHTML; 따라..
[JS] K진수에서 소수 개수 구하기
소수구하는 알고리즘을 알고있다면 풀기 쉬운 문제였다. 소수인지 아닌지 확인하기위해서는 소수의 제곱근까지만 구해도 된다는걸 항상 알아두자. 문제풀이 방식은 제공된대로 1. k진수로 바꾸기 2. 0을 기준으로 나누어주기 3. 나눈 값들이 소수인지 아닌지 판별하기 4. 소수인 값들의 개수 세기 const isPrime = (n) => { if (n
[JS] 주차요금 계산
map자료형을 활용해서 구현해보았다. 현재들어와 있는 차량을 저장할 Map 자료형 하나와 출차한 차량을 저장할 Map자료형을 넣었다. 1. 차량이 In인 경우 in 자료형에 차량 입차시간 넣어주기. 2. 차량이 출차하는 경우 in 자료형에서 빼낸 이후, 출차 된 곳에 주차된 시간을 넣어주고 만약에 이전에 주차했던 차량이라면 누적시간을 더해준다. 이때, 문제에서 들어갔을때마다 계산을 하는것이 아닌, 누적시간을 활용해서 주차시간을 계산하기 때문에 위처럼 해주어야 한다. 3. record를 다 순회한 다음, 입차된 차들은 모두 23:59까지 있었다고 계산을 해준다. 4. 출차된 차량의 자료형을 차량 번호대로 정렬해준 이후, 요금을 계산한다. const hTom = (time) => { const [h,m] =..
[JS] 양궁대회
일종의 완전탐색 기법으로 문제를 해결하였다. 화살이 최대 10개이고 모든 경우의수를 단순히 조합으로 구하는게 아니라 순열 형식으로 구하는 거라서 경우의 수가 크게 안나올 것이라 생각하여 10개를 쏘았을때 맞출수 있는 모든 경우의 수를 구하였고 실제로 10개의 화살을 쏘았을때 10만개의 경우의 수가 되지 않았다. 이어서 점수를 구하는 함수를 사용하고 만약 가장 낮은 점수가 같을때 개수를 비교할 수 있는 로직을 추가해주어서 해결하였다. 1. 화살 n개로 나올 수 있는 모든 경우의수를 재귀함수로 구하기 2. 점수를 계산해서 점수의 차가 가장 큰 경우에는 바꿔주기 3. 점수 차가 똑같은 경우 가장 낮은 점수의 개수를 통해서 정답 정해주기 4. 정답이 없다고 [-1]을, 정답이 있다면 해당 정답 반환하기 모든 경..
[JS] 두 큐 합 같게 만들기
큐 구조를 직접 구현하여 해결하였다. 두 큐의 합이 같으려면 두 큐의 값을 모두 더한 이후 2로 나눈 값으로 만들어주는것이 문제해결을 위한 핵심 요소이다. 큐의 값을 그때그때 구하는것도 번거로우니 큐 구조를 구현할때 sum값을 하나 넣어두어서 합계도 바로바로 꺼내올 수 있도록 구현했다. 이후, 넉넉히 검사를 진행하게 하고 큐 구조들 중에서 합이 큰 큐에서 작은 큐로 값을 전해주는 방식으로 문제를 해결하였다. class Node { constructor (val) { this.val = val this.next = null } } class Queue { constructor () { this.front = null this.size = 0 this.end = null this.sum = 0 } push ..