일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- IntelliJ
- 부산입국
- 벤쿠버렌트
- Linux
- FK 설정
- Lesson3
- database연결
- 벤쿠버 렌트
- 1463번
- codility
- 엔테크서비스
- QA엔지니어
- Java
- 외래키설정
- FIDO 환불
- 레노보노트북
- Lesson2
- 자바
- 리눅스
- 프로그래머스
- 데이터의 무결성
- 캐나다워홀
- 벤쿠버집구하기
- binaray_gap
- 설탕문제
- 백준알고리즘
- BC렌트
- 파이도 환불
- 언마운트
- FLEX5
- Today
- Total
목록꼬꼬마 개발자 노트 (197)
대충이라도 하자
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dDdI7K/btre2fb1R5M/Zk2tISMLdKke2ISqYBYlY1/img.png)
***마찬가지로, 투 포인터 사용 ***이렇게 간단히 할 수 있는데, 아이디어를 생각해내는 게 역시 어렵다ㅜㅜ *** 0을 맨 뒤로 보내줘야 하기에 계속 처음과 맨 마지막을 비교하려고 했는데 그럴 필요 없이, last에 -1값 부여( 인덱스가 0일 때, 값이 0이 아닐 경우 대비)한 후에, 앞쪽부터 0이면 pass, 0이 아닌 경우는, last(제일 최근에 0이었던 인덱스 or 이미 자리 바꿔준 곳의 인덱스) 그렇기에 여기서 +1을 해주면 이제 바꿔줘야 할 인덱스가 나옴 ***이런 식으로 가장 최근의 것을 바꿔주면 됨.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VPbKV/btre093tjYN/72VRUpMW7f87npG2xzOyr0/img.png)
***새로운 배열을 만들고 index 계산으로 nums 값을 집어넣은 후, 다시 값 복사한 방법 *** 이 아이디어는 생각도 못했네.. *** 맨 처음, 전체 배열을 reverse한다 -> 그러고 나서 0 ~ k 번째까지는 역순열일 것이기 때문에 다시 reverse -> k ~ num.length까지는 제대로 된 순서이기 때문에 제자리로 돌려주는 reverse!
![](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을 해야 하기 때문에 시간이 더 걸리는 게 아닐까 싶다. 문제 다시 읽어보니깤ㅋㅋㅋㅋ이미 정렬되어 있다는 조건이 있네..... 그렇게 하니까 역시 가장 빠르다.