1일차 등수구하기 점수계산 회문문자열
끝끝짝수와 홀수를 나누지말고 올림을 이용하여 두개를 같은 코드로 처리할 수 있게하자.또 아래 포문 처럼 하나는 앞에서부터 , 다른 하나는 뒤에서부터 오며 검사하는 코드는 지양하고, js 내장 메서드를 이용해서 풀어보자문자열을 뒤집는 코드match(/\[a-z]/) 알파
3일차
코드는 짧지만, 나에게 매우 강렬했던 문제. dict를 정적인 배열 말고 동적인 객체로 만들어보자.
두 개의 배열을 탐색하는 두 개의 포인터를 가지고 원하는 기능을 수행하게 하는 알고리즘1차원 배열이 있고 이 배열에서 각자 다른 원소를 가리키고 있는 2개의 포인터를 조작해가면서 원하는 것을 얻는 형태이다. 이 때문에 투 포인터 알고리즘이라고 부른다.인풋 : 오름차순
stack으로 풀기non stack후위식 연산
이진트리순회 이진수 출력하기 부분집합구하기
선택했냐 안했냐로 트리를 구성하면 쉽게 풀수있다.종료 시점을 정해주는 것. 아래 문제는 내일 리팩토링
동전 최소로 나오게 하는 갯수 구하기DFS cutting임 이미 값보다 크거나 같으면 절대 값이 될 수 없으므로 끝내주는 것이 중요하다.33 19라고 가정하면 매우 값이 커지겠지 ?이미 구한 값들은 기억해둔다.
왼쪽 방식은 틀리고 오른쪽 방식은 맞다.위 문제를 모든 순열을 구한다음 순열 배열마다 값을 더해서 입력값과 비교하는 로직이라면 시간초과임.다음과 같이 조합수를 이용해서 풀어야 더 빠르다.DFS와 유사하지만, 다르다.백트래킹의 주요개념은 유망하지 않은 자식은 탐색하지 않
너비우선탐색에서 이미 넣은 것은 넣으면 안된다array.entries() => index,item이 담긴 iterator로 리턴된다.문자열 배열화하기...string
(\\D\*)(\[0-9]\*) => 숫자가 아닌것으로 반복된 1그룹, 숫자로 반복된 2그룹을 matchingflag도 상당히 중요하다숫자 전에 등장하는 숫자가 아닌 문자열들과 숫자들을 그룹으로 구분하고 match 해야함. 보다 +맞음 숫자는 무조건 나옴 ( 는 0일
진법 변환은 (check++).toString(n); 로 하면됨. n진법의 정수로 바뀜.배열을 비교하는 여러가지 방법combi.every((i, idx) => minor\[check]\[idx] === i) => 모든 요소가 같은지 비교함. 하지만 이방법은 크기가 같은
\+는 1~ 을 의미한다.아래 사진 처럼 하나의 숫자만 올 수 있는 경우 133이 포함되어있어 수행되지 않는다.숫자 또는 , 이것이 중괄호 안에서 반복되는 것을 찾아라라는 의미.사이사이에 ,가 포함되지 않는 이유는 중괄호로 가려져 있지 않기때문F-5 freedom 18
값이 크다면, k의 값을 줄여야한다. 소팅되어있는 상황에서 값은 왼쪽으로 갈수록 작다. 따라서 작은 값을 더해야 값이 줄어들 수 있으므로(유망해질 수 있으므로) k의 값을 줄인다.값이 작다면, j의 값을 키워야한다. 소팅되어있는 상황에서 값은 오른쪽으로 갈수록 커진다.
가장 큰 펠린드롬을 찾는 문제이다.그냥 떠오르는데로 문제를 풀었더니, 시간초과발생. O(n^3)위 코드는 문자열을 n^2번 순회하면서 나오는 문자열을 펠린드롬 체크함수에 넣어 체크한 후 가장 크면 저장하는 방식의 코드이다.(Brute Force)return string
조금은 느린 모습이다.다음은 개선이 없는 솔루션 코드이다.속도 개선 후 코드
동적 계획법이란 큰 문제를 작은 문제들로 풀어내는 것을 말한다. Bottom Up 방식이다. 작은 문제들부터 계산하여 큰 문제들을 해결한다.조건1️⃣ 작은 문제들의 반복인 경우피보나치의 경우 F(5)를 구하기 위해선 F(4) F(3)이 필요하고, F(4)를 구하기 위해
✅ 다시풀어야할 문제반시계 방향은 고려하지 않아도 된다는 점.다음과 같다고 할 때, 3인 친구가 점검한다고 가정하자.3인친구는 시계 방향일 때 10에서 1까지 점검할 수 있고, 반시계방향으로 점검할 때 1에서 10까지 점검할 수 있다.즉 원이 아닌 선형으로 만들게 되면
반례 : 문자열길이가 1일때 답은 1임 -> 기존의 코드는 첫번째 포문에 안들어가게됨밑은 함수로 분리한 것이다.반례찾을때는 애매한 경우, 극단적인 경우를 우선적으로 조사하자.
htmlindex.jsfetcherAppBreadCrumb.jsNodescache
filter를 한번 더 수행하는 것이 맘에 들지 않는다.forEach로 돌면서 Change를 제외한 액션들은 -> id 값과 텍스트를 담아 저장한다.다 저장되면 이를 map으로 정답 형식에 맞게 mutate하여 내보낸다.8번 기준 22.73ms캐시 기능을 추가해서, 이
풀이1의 방식엔 너무 불필요한 코드가 많아 삭제하고 다음과 같이 리팩토링하였다.설명은 주석에 있다.굳이 교집합 합집합을 구할 필요는 없다. 우리는 갯수만 알면 되므로 다음과 같이 풀수도있다.참고 사진 1참고자료 1
카카오 코딩테스트 1,2 차가 끝난 후 오랜만에 풀어보는 leetcode.뭐 부터 해야할지 막막했는데, 그 전에 연습 해두려고 했던게 생각나서 체계를 잡을 수 있었다.해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 알고리즘을 말합니다. 최적화 문제
복습 겸, 감잡을겸 풀어보았다.array의 내장함수를 이용하면 더 빠르게 풀 수 있다.why...? 조회하는데 시간이 더 걸려서 인건가..?아는 사람이 있다면 댓글로 부탁드림미다...
백트래킹 -> 유망하지 않으면 가지치기. (더가지않는다)유망 조건 1 : 다음으로 탐색할 문자가 wordlevel과 일치하는가 ?유망 조건 2 : 방문하지 않은 곳인가 ?방문을 체크하기 위한 배열을 사용하는 것이 비효율적으로 보여 객체를 사용하는 코드로 변경해보았다.오
위 코드는 성능이 조금 구리다..23% 성능.메모이제이션을 사용하여 개선해보자.메모이제이션을 추가해주었으나 더 느리다...?아래 코드를 주석으로 변경해주어야다음의 실행속도를 볼 수 있다. (why?)다시 풀어보자.
가장 가까운 0과의 거리로 데이터 값을 변경하는 문제이다.1을 발견하면 -> 해당 1로 부터 BFS를 실시하여 0을 발견하면 그 값을 저장시키도록 할 수 있으나, 비용이 매우커서 시간초과가 발생하게 된다.
문자열을 한개로 쪼갤때, 두개로 쪼갤때 -> 마다 문자열을 전부 쪼개어 중복이 있는지 없는지 검사한 후 중복이 없는 것이 있다면 answer을 갱신한다.최악의 경우 n^2 \* (slice하는 시간 + 중복 체크를 위해 set을 만드는 시간) 비효율적이다.슬라이딩 윈
각 트래픽들의 시작점과 끝점을 알아낸다음.트래픽들을 순회하면서 트래픽 요소의 시작점 부터 끝점까지 0.001 단위로 순회하며 1초 내에 있는 트래픽 갯수를 센다.
\-> 최적화 문제이기에 가장 먼저 투포인터, 슬라이딩 윈도우를 생각해봄.\-> 투포인터 알고리즘을 사용하여, 모든 종류의 보석이 담길때까지 오른쪽 포인터를 늘리다가.\-> 모든 종류의 보석이 담기게 되면, 최소 길이 구간을 찾기 위해 좌측 포인터를 늘린다.좌측 포인터
중복 체크하는데 배열 메소드를 사용하고 있음. map을 사용하여 중복을 체크해보자 (속도 개선을 위해)banned_id 요소와 순열 요소 간 문자열 비교 개선할 수 있을것같다?개선이 되지 않았다..? 배열자체도 객체이기 때문에 큰 차이가 없는 것으로 파악
다익스트라 구현해본적이 너무 옛날이라 강의 보고 코드를 따라 쳐봄priority queue합동 택시 요금
코테 전이라 간단하게 개념 복습을 하려고한다 Minimum Depth of Binary Tree 마지막 리프까지 가는 최단 경로를 구하면된다. 모든 노드를 점검하는 DFS가 아닌, BFS가 적합하다.
소트 역순인지 확인할 것. (내림차순인지 오름차순인지)정규표현식을 더 이용한 코드
기존 풀이