일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 리눅스
- BC렌트
- codility
- Java
- 자바
- 엔테크서비스
- binaray_gap
- 설탕문제
- IntelliJ
- 데이터의 무결성
- 1463번
- Linux
- FIDO 환불
- FK 설정
- 부산입국
- FLEX5
- 프로그래머스
- 파이도 환불
- Lesson3
- 벤쿠버집구하기
- QA엔지니어
- 언마운트
- 벤쿠버 렌트
- 캐나다워홀
- 외래키설정
- Lesson2
- 백준알고리즘
- 벤쿠버렌트
- database연결
- 레노보노트북
- Today
- Total
목록꼬꼬마 개발자 노트/Leetcode Challenge (19)
대충이라도 하자
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ceqYcG/btre5P3X4Rs/WosWSeTWnOiMEn9sso0wl0/img.png)
*** 그냥 구현말고 어떤 알고리즘 사용해야 할 지 감이 안 잡혀서 처음의 코드... ***non-decreasing이 키워드일 것 같은데 *** 결국, sorting을 다시 하긴 해야 함. ***Math.pow() -> 일반 제곱으로 바꿔주면 조금 더 빠름, but memory usage... ***two pointer 알고리즘 사용 ***non-decreasing order 이기 때문에, 앞쪽이 음수인 경우에만, 순서를 뒤집일 가능성이 있음 *** length의 경우, 변수로 주어지는 것보다 함수 내에서 주어지는 걸 사용하는 게 훨씬 빠름 ex) nums.length -> answer.length ***양쪽 처음과 끝의 인덱스를 변수로 주고, 각 각 비교해서 크면 처음 값을 맨 뒤로 옮겨줌..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lHTKZ/btre5cylvcd/vgub1rbAVXPASXkhlmU871/img.png)
*** 반복문을 돌리면서 return 하지 못했으면, 결국 target 값을 찾지 못했다는 뜻 ***마지막에 구해진 mid 값과 target을 비교해서, 그 값에 따라 target의 insert 값을 정할 수 있음 ***if문으로 조건 주는 것보다 삼항연산자로 return 하는 것이 메모리를 더 적게 차지함. (Ternary Operator is better for memory usage!)
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c6kwKp/btre4OdpPdt/E2L5kcONBn2y9CnvMrlke0/img.png)
또 다른 Binary Search 문제 *** 첫 번째 오류 버전을 찾는 거라 조금 다른 방법이라고 생각했는데 return 하지 않고 그냥 계속 start
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ezeJuy/btreY2KlrOc/xv0chrr2MrGYBka8AytKyK/img.png)
1. Binary Search : 생각해보니 원리랑 어떻게 사용하는지 알면서도 문제 풀거나 할 때 한 번도 써본 적이 없는 거 같다... 분명히 일반적인 탐색보다 훨씬 시간이 더 적게 걸릴 텐데 왜 안 썼는지 모르겠네.. *** start, end를 잘 정리해야 함. *** while의 조건 잘 기억할 것 *** end = nums.length에서 -1한 값이여야 함 But!!!! 이상하게 이진탐색이 오히려 시간이 더 걸림. 아무래도 sorting을 해야 하기 때문에 시간이 더 걸리는 게 아닐까 싶다. 문제 다시 읽어보니깤ㅋㅋㅋㅋ이미 정렬되어 있다는 조건이 있네..... 그렇게 하니까 역시 가장 빠르다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cAIdri/btq7VAzT57j/j6kr4AfEjogE9G6GKRZfq1/img.png)
*** 제일 적은 k의 값은 1 : Strictly 증가 or 감소 하는 배열 -> 1의 차이 *** 결국 도출되는 빠른 방법 *** k+1의 값까지는 하나씩 줄여 가면서 넣고 k+1부터는 1씩 증가하게 넣음!!!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cQwRWm/btq7VyCmIs8/QKItpmJs4VkmKrH6iblcz0/img.png)
*** 자료구조에 대한 공부가 조금 더 필요할 듯하다. 오류가 처음 발생했던 부분은 int size = queue.size()를 정해주지 않고 i
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xpEgH/btq7UOTcc1d/7Wpjtex35nX3iybw47ZC60/img.png)
*** Time limit exceeded 나왔음..... 하지만 여기서도 주의해야 할 것은 max 값을 0으로 지정해놓으면 안되고 matrix.length랑 matirx[0].length값 제대로 지정했는지 확인해야 한다. *** 같은 time limit exceeded 이지만 좀 더 코드가 깔끔한 거 같다. dfs를 다르게 구성하는 방법 ***결국 맨 처음 생각한 대로 dp + dfs로 생각해야 하는 문제이다. A common approach to improve DFS is through memorization. 원래의 방법을 가지고는 도저히 dp랑 연관 짓기가 어려워 코드를 바꿨다. 하지만, loop 대신 condition조건문으로 바꿔서 사용하면 더 빨라질 듯하다. 무조건 다시 풀어봐야 할..