File tree Expand file tree Collapse file tree 5 files changed +135
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 5 files changed +135
-0
lines changed Original file line number Diff line number Diff line change 1+ // ์ฌ์ดํด์ ์ฐพ๋ ๋ฌธ์ . DFS๋ฅผ ์ด์ฉํด์ ๋ฐฉ๋ฌธํ๋์ง ์ฌ๋ถ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฒดํฌํ๋ฉด๋๋ค.
2+ // DFS๋ฅผ ์งํ ์ค์ธ ๊ฒ์ ๋ค๊ณ ์์ด์ผ ์ฌ์ดํด ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์๋ค.
3+ // ๊ฐ์ ์์ ๋
ธ๋์ ์์ ๋ฐ๋ผ ์๊ฐ ๋ณต์ก๋๊ฐ ๊ฒฐ์ ๋จ O(N+L)
4+ class Solution {
5+ public boolean canFinish (int numCourses , int [][] prerequisites ) {
6+ List <List <Integer >> graph = new ArrayList <>();
7+ for (int i = 0 ; i < numCourses ; i ++) {
8+ graph .add (new ArrayList <>());
9+ }
10+
11+ for (int [] pair : prerequisites ) {
12+ graph .get (pair [1 ]).add (pair [0 ]);
13+ }
14+
15+ // 0: ๋ฐฉ๋ฌธ X
16+ // -1: DFS ์งํ ์ค
17+ // 1: ๋ฐฉ๋ฌธ ์๋ฃ
18+ int [] visited = new int [numCourses ];
19+
20+ // ๋ชจ๋ ๋
ธ๋์์ DFS ์ํ
21+ for (int i = 0 ; i < numCourses ; i ++) {
22+ if (dfs (graph , visited , i )) return false ;
23+ }
24+
25+ return true ;
26+ }
27+
28+ private boolean dfs (List <List <Integer >> graph , int [] visited , int node ) {
29+ if (visited [node ] == -1 ) return true ; // ๋ฐฉ๋ฌธ ์ค์ด๋ฉด ์ฌ์ดํด์ด ๋ฐ๊ฒฌ
30+ if (visited [node ] == 1 ) return false ;
31+
32+ visited [node ] = -1 ; // ์งํ ์ค ํ๊ธฐ
33+ for (int next : graph .get (node )) {
34+ if (dfs (graph , visited , next )) return true ;
35+ }
36+ visited [node ] = 1 ;
37+
38+ return false ;
39+ }
40+ }
Original file line number Diff line number Diff line change 1+ // ํธ๋ฆฌ์ ํํ๋ฅผ ๋ฐ๊พธ๋๊ฑด ๋๋ถ๋ถ DFS๋ก ํธ๋๊ฒ ๊ณต๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์ ์ ๋ฆฌํ๋ค.
2+ // BFS๋ก๋ ํ์ด ๊ฐ๋ฅํ์ง๋ง, BFS๋ ๋๋ถ๋ถ ํ๋ฅผ ์ด์ฉํด์ ๊ณต๊ฐ๋ณต์ก๋๊ฐ ๋์์ง๋ค.
3+ class Solution {
4+ public TreeNode invertTree (TreeNode root ) {
5+ if (root == null ) return null ;
6+
7+ TreeNode temp = root .left ;
8+ root .left = invertTree (root .right );
9+ root .right = invertTree (temp );
10+
11+ return root ;
12+ }
13+ }
Original file line number Diff line number Diff line change 1+ // ํ์ฌ ์์น์์ ์ต๋๋ก ๊ฐ ์ ์๋ ์ธ๋ฑ์ค์ ์ด๋ ฅ์ ๊ฐฑ์ ํ๋ฉด์ ์ต๋ ๋ฒ์๋ฅผ ๋์ง ์์๋๋ฅผ ๊ณ์ ํ๋ณํ๋ฉด ๋จ
2+ // ์ฒ์์ DP์ธ์ค ์์๋๋ฐ DP ๋ฐฐ์ด ์์ด ๊ทธ๋ฅ ํ๋ฆผ
3+ class Solution {
4+ public boolean canJump (int [] nums ) {
5+ int maxReach = 0 ;
6+
7+ for (int i = 0 ; i < nums .length ; i ++) {
8+ if (i > maxReach ) {
9+ return false ;
10+ }
11+
12+ maxReach = Math .max (maxReach , i + nums [i ]);
13+ if (maxReach >= nums .length - 1 ) {
14+ return true ;
15+ }
16+ }
17+
18+ return true ;
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ // ์ฐ์ ์์ ํ๋ก ๋ค ํฉ์ณ๋ฒ๋ฆฐ ๋ค์์
2+ // ํ๋ฅผ ์ํ๋๋ฉด์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ฌ์์ฑํ๋ค. ์ฑ๋ฅ์ ๋น๊ต์ ๋ฎ๊ฒ ์กํ
3+ // ๋ถํ ์ ๋ณต๋ฒ์ผ๋ก ํ๋ฉด ๋ ์ข์ ์ฑ๋ฅ์ด ๋์จ๋ค๊ณ ํ๋ค.
4+ class Solution {
5+ public ListNode mergeKLists (ListNode [] lists ) {
6+ PriorityQueue <ListNode > pq = new PriorityQueue <>((a , b ) -> a .val - b .val );
7+
8+ for (ListNode node : lists ) {
9+ if (node != null ) pq .offer (node );
10+ }
11+
12+ ListNode newLists = new ListNode (-1 );
13+ ListNode curr = newLists ;
14+
15+ while (!pq .isEmpty ()) {
16+ ListNode minNode = pq .poll ();
17+ curr .next = minNode ;
18+ curr = curr .next ;
19+
20+ if (minNode .next != null ) {
21+ pq .offer (minNode .next );
22+ }
23+ }
24+
25+ return newLists .next ;
26+ }
27+ }
Original file line number Diff line number Diff line change 1+ // O(log n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ฌธ์ ์์ ์๊ตฌํ๊ณ ์๋ค.
2+ // O(log n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋ ํ์ ๋ฌธ์ ๋ ๋๋ถ๋ถ ๋ฐ์ด๋๋ฆฌ ์์น๋ก ํด๊ฒฐ๋๋ค.
3+ // ์ฃผ์ด์ง ๋ฐฐ์ด์ด ์ ๋ ฌ๋์ด์๋ค๋ ์ ์์ ์ด์งํ์์ ์ด์ฉํ๋ฉด ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
4+ class Solution {
5+ public int search (int [] nums , int target ) {
6+ int left = 0 , right = nums .length - 1 ;
7+
8+ while (left <= right ) {
9+ int mid = left + (right - left ) / 2 ;
10+
11+ if (nums [mid ] == target ) {
12+ return mid ;
13+ }
14+
15+ // ์ผ์ชฝ์ด ์ ๋ ฌ๋ ๊ฒฝ์ฐ
16+ if (nums [left ] <= nums [mid ]) {
17+ if (nums [left ] <= target && target < nums [mid ]) {
18+ right = mid - 1 ;
19+ } else {
20+ left = mid + 1 ;
21+ }
22+ }
23+ // ์ค๋ฅธ์ชฝ์ด ์ ๋ ฌ๋ ๊ฒฝ์ฐ
24+ else {
25+ if (nums [mid ] < target && target <= nums [right ]) {
26+ left = mid + 1 ;
27+ } else {
28+ right = mid - 1 ;
29+ }
30+ }
31+ }
32+
33+ return -1 ;
34+ }
35+ }
You canโt perform that action at this time.
0 commit comments