일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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렌트
- FK 설정
- 벤쿠버렌트
- 백준알고리즘
- Java
- FLEX5
- Lesson3
- 엔테크서비스
- database연결
- 데이터의 무결성
- 설탕문제
- FIDO 환불
- 캐나다워홀
- 자바
- codility
- 리눅스
- Linux
- 외래키설정
- 1463번
- 언마운트
- IntelliJ
- 파이도 환불
- Lesson2
- QA엔지니어
- 벤쿠버집구하기
- 레노보노트북
- binaray_gap
- 프로그래머스
- 벤쿠버 렌트
- 부산입국
- Today
- Total
목록꼬꼬마 개발자 노트 (197)
대충이라도 하자
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/o7px5/btrg10EmtEy/IeNjDAqgIOErtaNPEKl6L1/img.png)
*** dfs Medium 문제 *** 원래 사용하는 dfs를 사용하자니 반복으로 계산 혹은 누락될 위험이 있어 아래와 같은 방법으로 해야 함 *** 총 섬의 갯수는 위의 방식 사용 가능, but 섬이 몇 개의 space로 이루어져있나 같은 문제는 다르게 접근해야 함 *** 결국, return에서 dfs를 타고 갈 수 있도록 프로그래밍
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cK3g5b/btrgXqXjMXk/5cY45RPRXhSqUKqRn0fR41/img.png)
*** DFS로 푸는 문제 *** before 숫자와 newColor 숫자가 동일한 경우가 있기 때문에 dfs 맨 처음 return 조건에 image[sr][sc] != before 과 image[sr][sc] == newColor 두 개를 함께 주어줘야 한다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b9kzQd/btrfs6dLUzE/fP7fjk4lt7MV1UQGSxCeCk/img.png)
***Sliding window 알고리즘 : 이제껏 들어보지 못한 알고리즘....ㅋㅋㅋ 일정한 범위를 가지고 있는 것을 유지하면서 이것을 이동(sliding)하는 것이다. *** This can be solved using arrayList, set, and map. *** 기본적으로 s의 끝까지 돌리고 s에 들어있지 않은 char이면, set에 더하고 max값을 구한다. 만약에 s가 set에 없으면, start 인덱스를 하나씩 제거하면서 오른쪽으로 이동하게 된다. 중복되는 char를 만날 때까지 지우게 되므로 중복되지 않는 start 점을 구할 수 있게 된다. -> sliding window 알고리즘의 원리인 듯 *** 밑의 방법이 조금 색다른 느낌? *** 처음부터 시작해서 끝까지 확인하는 것은 동일..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dQWABd/btrfnPdm6Jm/T6cicb7YrZY4HH6uFxmn31/img.png)
*** 역시 어렵지만, 원리는 쉽다. *** 끝에서 n번째 이기 때문에, 두 포인터 사이에 n만큼의 차이가 있으면 된다. 그렇기에, fast를 먼저, n만큼 앞서나가게 한 다음, slow와 fast를 똑같이 next시킨다. fast가 end에 닿으면, slow의 다음이 삭제되어야 할 노드이고 slow.next에 slow.next.next를 넣어주면 삭제! *** 효율이 별로 좋지 못하다. ***아래와 같이 dummy node를 사용하지 않고도 가능하다. ***dummy node를 만들지 않으면, 훨씬 빠르다. ListNode start도 없어도 되므로 Memory usage도 better 대신, fast가 n 만큼 앞서나갔을 때, fast가 tail이 될 상황을 고려해 조건문을 넣어주어야 한다. retu..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/era2Fu/btrfnOFtVWc/VkGeGqhYko6ZzzmyOCeWBK/img.png)
***Node 다루는 문제(LinkedList)에 아직 엄청 취약한 거 같다... ***해설을 봐도 이해가 잘 되질 않고... 꼭 개념을 짚고 넘어가야 할 것 같음 ***slow라는 포인터와 fast라는 포인터 두 개를 둔다. ListNode에서 head는 맨 처음 node를 말함(tail은 맨 끝 node) 그렇게 두 개의 포인터에서 slow는 한 번에 one step , fast는 한 번에 two steps이다. 그런 식으로 fast가 먼저 맨 끝에 닿으면 slow가 중간에 있는 node임을 알 수 있다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/EYzbs/btrfdZNjd46/eUNHgOH39t1WTnbMLc1UC1/img.png)
*** first step ***먼저 " "를 기준으로 split -> 하나씩 단어 가지고 와서 reverse -> 그 다음 String answer 에 reverse 완료 된 거 + " " -> 맨 마지막 answer.substring(0,answer.length()-1) 해줬다. (Stringbuilder의 방법도 고려해볼 것!) ***그런데 runtime, memory usage 측면에서 좋지 못한 듯... ***아래와 같은 방법을 찾았다! ***나는 빈칸을 기준으로 split을 먼저 했는데 그럴 필요 없이 전부 charArray로 변경 *** ' '를 만나면 여태까지의 right값과 left 값을 reverseWord로 전달 ***reverseWord 메소드에서 reverse 이전의 문제에서처럼 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/x68Xu/btrfd0kfj9i/FyhJ4VmMVZA9VR2P7M23MK/img.png)
***마찬가지로, two pointers 알고리즘 활용 *** 시간으로는 똑같지만, 메모리 상으로는 계산할 때, end--, start++ 처리를 해서 메로리 사용이 더 적은가...? *** 사실, 돌려볼 때마다 수치가 계속 변경이 되서 정확한지는 모르겠다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bSTGz6/btre42wKEJe/op7f2YNS2RYk5kQUhOGSP0/img.png)
*** 다른 사람들 풀이를 보니, 1) two pointer 2) binary search 3) hashmap 이렇게 있었는데 성능은 binary -> two pointer -> hashmap 순인 거 같다. ***애초에 non-descending order이기 때문에, 맨 처음과 맨 마지막을 더해서 target보다 적으면, start++, target이 크면 end--를 하면 된다는 것이 중요! *** 이진탐색 사용 ***target 값보다 적을 때는 left 값 이동, target 값보다 크면 right 값 이동이라는 기본 골자는 똑같다.