์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค
๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป PS/LeetCode 150

[Java] 33. Search in Rotated Sorted Array

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป PS/LeetCode 150

[Java] 33. Search in Rotated Sorted Array

2023. 9. 4. 07:29

๋ฌธ์ œ ํŒŒ์•…

์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๋ฐฐ์—ด nums๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

์ธ๋ฑ์Šค k๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์ œ์ผ ์ฒซ ์›์†Œ๊ฐ€ ๋˜๋„๋ก rotated ๋˜์–ด์žˆ๋‹ค.

 

target ์ด ๋ฐฐ์—ด nums ์— ํฌํ•จ๋˜์–ด์žˆ๋Š”์ง€ O(logN) ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•œ๋‹ค.

 


ํ’€์ด

1๏ธโƒฃ ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•œ ํ’€์ด

๐Ÿ’ก ๋– ์˜ค๋ฅธ Idea

๋จผ์ €, ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด์„  ์ด๋ถ„ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•ด์•ผํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š”, target์ด nums์— ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ์ด๋ถ„ ํƒ์ƒ‰ํ•ด์•ผํ•˜๋Š”๋ฐ

ํŠน์ • ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„  ์ •๋ ฌ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, rotated๋œ ๋ฐฐ์—ด์„ ์ •๋ ฌ๋œ ๋‘๊ฐœ์˜ ๋ฐฐ์—ด๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด ๋‚ด์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

ex) [4, 5, 6, 7, 0, 1, 2] ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ, [4, 5, 6, 7] ๊ณผ [0, 1, 2] ๋ฐฐ์—ด 2๊ฐœ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ์ตœ์†Ÿ๊ฐ’์ธ 0 ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„์•ผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ตœ์†Ÿ๊ฐ’์€ mid์— ์œ„์น˜ํ•œ ์›์†Œ๊ฐ€ ๊ฐ€์žฅ ๋๊ฐ’๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์˜ค๋ฆ„์ฐจ์ˆœ์„ ์œ ์ง€ํ•˜๊ณ ์žˆ๋‹ค๋ฉด ํƒ์ƒ‰์„ ์™ผ์ชฝ ์˜์—ญ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๋ฐ˜๋Œ€๋ผ๋ฉด ์˜ค๋ฅธ์ชฝ ์˜์—ญ์œผ๋กœ ํƒ์ƒ‰ํ•ด์•ผํ•  ๊ฒƒ์ด๋‹ค.

์ •๋ ฌ๋œ ๋ฐฐ์—ด 2๊ฐœ๋กœ ๋ถ„๋ฆฌํ–ˆ๋‹ค๋ฉด, ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ target ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ์™„๋ฃŒ๋œ๋‹ค.

 

class Solution {
    public int search(int[] nums, int target) {
        int idx = getStartIdx(nums);
        int result1 = findIdx(nums,0,idx-1,target);
        int result2 = findIdx(nums,idx,nums.length-1,target);

        return Math.max(result1,result2);
    }

    private int getStartIdx(int[] nums){
        int left = 0,right = nums.length-1;

        if(nums[left]<=nums[right]){
            return 0;
        }

        while(left<right){
            int mid = (left+right)/2;
            if(nums[mid]<=nums[right]){
                right = mid;
            }else{
                left = mid+1;
            }
        }

        return left;
    }

    private int findIdx(int[] nums, int left, int right,int target){
        while(left<=right){
            int mid = (left + right)/2;
            if(target<nums[mid]){
                right = mid-1;
            }else if(target>nums[mid]){
                left = mid+1;
            }else{
                return mid;
            }
        }
        return -1;
    }
}

 

๊ฒฐ๊ณผ


๐Ÿ“– ํšŒ๊ณ 

์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋ฐฐ์—ด์—์„œ ์ด๋ถ„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์„ ๋– ์˜ฌ๋ฆฌ๋Š”๊ฒŒ ๊ต‰์žฅํžˆ ๊นŒ๋‹ค๋กœ์šด ๊ฒƒ ๊ฐ™๋‹ค.

 

๊ทผ๋ฐ, ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ถฉ๋ถ„ํžˆ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””์–ด๋“ค์ด๋‹ค.

 

find peak element ๋ฌธ์ œ์—์„œ๋Š” mid ๊ฐ’์ด mid+1๋ณด๋‹ค ์ž‘์œผ๋ฉด ์˜ค๋ฅธ์ชฝ ์˜์—ญ์„ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€๊ณ 

 

์ด๋ฒˆ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ์—๋Š” mid ๊ฐ’์ด right ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ, ์˜ค๋ฅธ์ชฝ ์˜์—ญ์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์Œ์„ ๋ณด์žฅํ•˜๋ฏ€๋กœ ์™ผ์ชฝ ์˜์—ญ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ด๋ถ„ ํƒ์ƒ‰ ์กฐ๊ฑด๋“ค์„ ์ž˜ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๊ณ ๋ฏผ์„ ํ•ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

  • ๋ฌธ์ œ ํŒŒ์•…
  • ํ’€์ด
  • 1๏ธโƒฃ ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•œ ํ’€์ด
  • ๊ฒฐ๊ณผ
  • ๐Ÿ“– ํšŒ๊ณ 
'๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป PS/LeetCode 150' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Java] 530. Minimum Absolute Difference in BST
  • [Java] 153. Find Minimum in Rotated Sorted Array
  • [Java] 162. Find Peak Element
  • [Java] 148. Sort List
์šฐ๊ทœ์ด์ธ์šฐ์œค
์šฐ๊ทœ์ด์ธ์šฐ์œค
๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.