학생 수가 최대 20000000명이기 때문에, 제곱 시간이 넘어가는 코드는 시간초과가 발생한다. 따라서 이분탐색을 활용한다.
처음에 보고 이중 링크드 리스트를 떠올리지 못했다. 그래서 일반 배열로 풀게되었는데, splice하여 삭제하고, 붙이는 작업의 비용이 매우 커지게 되어 시간초과가 발생하게 됨.이중 링크드를 생각하자.Node 클래스를 만들어 이중 링크드 리스트를 구현한다.
코테 전이라 간단하게 개념 복습을 하려고한다 Minimum Depth of Binary Tree 마지막 리프까지 가는 최단 경로를 구하면된다. 모든 노드를 점검하는 DFS가 아닌, BFS가 적합하다.
다익스트라 구현해본적이 너무 옛날이라 강의 보고 코드를 따라 쳐봄priority queue합동 택시 요금
중복 체크하는데 배열 메소드를 사용하고 있음. map을 사용하여 중복을 체크해보자 (속도 개선을 위해)banned_id 요소와 순열 요소 간 문자열 비교 개선할 수 있을것같다?개선이 되지 않았다..? 배열자체도 객체이기 때문에 큰 차이가 없는 것으로 파악
\-> 최적화 문제이기에 가장 먼저 투포인터, 슬라이딩 윈도우를 생각해봄.\-> 투포인터 알고리즘을 사용하여, 모든 종류의 보석이 담길때까지 오른쪽 포인터를 늘리다가.\-> 모든 종류의 보석이 담기게 되면, 최소 길이 구간을 찾기 위해 좌측 포인터를 늘린다.좌측 포인터
lock 배열을 기준으로 3배 확장된 테이블(배열)을 만든다.lock의 크기가 33이라면 99의 확장된 배열이 arr이된다. 이 후 가운데 len ~ len \* 2 - 1 까지 lock 배열을 채워둔다.이 가운데에 들어있는 lock 배열의 값들이 기준이 되어 key
각 트래픽들의 시작점과 끝점을 알아낸다음.트래픽들을 순회하면서 트래픽 요소의 시작점 부터 끝점까지 0.001 단위로 순회하며 1초 내에 있는 트래픽 갯수를 센다.
문자열을 한개로 쪼갤때, 두개로 쪼갤때 -> 마다 문자열을 전부 쪼개어 중복이 있는지 없는지 검사한 후 중복이 없는 것이 있다면 answer을 갱신한다.최악의 경우 n^2 \* (slice하는 시간 + 중복 체크를 위해 set을 만드는 시간) 비효율적이다.슬라이딩 윈
위 코드는 성능이 조금 구리다..23% 성능.메모이제이션을 사용하여 개선해보자.메모이제이션을 추가해주었으나 더 느리다...?아래 코드를 주석으로 변경해주어야다음의 실행속도를 볼 수 있다. (why?)다시 풀어보자.
백트래킹 -> 유망하지 않으면 가지치기. (더가지않는다)유망 조건 1 : 다음으로 탐색할 문자가 wordlevel과 일치하는가 ?유망 조건 2 : 방문하지 않은 곳인가 ?방문을 체크하기 위한 배열을 사용하는 것이 비효율적으로 보여 객체를 사용하는 코드로 변경해보았다.오
복습 겸, 감잡을겸 풀어보았다.array의 내장함수를 이용하면 더 빠르게 풀 수 있다.why...? 조회하는데 시간이 더 걸려서 인건가..?아는 사람이 있다면 댓글로 부탁드림미다...
카카오 코딩테스트 1,2 차가 끝난 후 오랜만에 풀어보는 leetcode.뭐 부터 해야할지 막막했는데, 그 전에 연습 해두려고 했던게 생각나서 체계를 잡을 수 있었다.해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 알고리즘을 말합니다. 최적화 문제
{} -> \[]로 바꾸고 JSON parse를 이용하여 배열 리터럴로 만든다. => 길이가 짧은 것부터 순회하기위해 소팅을 해주고 -> 요소들을 순회하며 요소들의 원소가 결과배열에 없다면 추가해준다.소팅을 해줌으로 써 -> n^2 번 돌아야 하는 문제를 해결set 자
풀이1의 방식엔 너무 불필요한 코드가 많아 삭제하고 다음과 같이 리팩토링하였다.설명은 주석에 있다.굳이 교집합 합집합을 구할 필요는 없다. 우리는 갯수만 알면 되므로 다음과 같이 풀수도있다.참고 사진 1참고자료 1
filter를 한번 더 수행하는 것이 맘에 들지 않는다.forEach로 돌면서 Change를 제외한 액션들은 -> id 값과 텍스트를 담아 저장한다.다 저장되면 이를 map으로 정답 형식에 맞게 mutate하여 내보낸다.8번 기준 22.73ms캐시 기능을 추가해서, 이