LeetCode 33. Search in Rotated Sorted Array

2026. 8. 21. 14:46·Algorithm/문제풀이
 

Search in Rotated Sorted Array - LeetCode

Can you solve this real interview question? Search in Rotated Sorted Array - There is an integer array nums sorted in ascending order (with distinct values). Prior to being passed to your function, nums is possibly left rotated at an unknown index k (1 <=

leetcode.com

 

문제 설명

nums배열은 원래 오름차순으로 정렬된 배열에서 왼쪽으로 k번 회전한 배열이다

예를 들러 nums가 [4,5,6,7,0,1,2] 로 주어지면

원래 배열인 [0,1,2,4,5,6,7]에서 왼쪽으로 3번 회전 한 것이 무넺에서 주어진 nums배열이라는 것.

그리고 이 배열에서 target의 인덱스를 찾아 반환하는 문제. 만일 이 target이 nums배열에 없다면 -1을 반환

이 target을 찾을때의 시간 복잡도는 O(log n)에 찾아야함

 

입력: nums = [4,5,6,7,0,1,2], target = 0
출력: 4

 

문제 풀이

문제에서 중요한 것은 이 회전된 배열에서도 어떤 피봇을 중심으로 보면 왼쪽 혹은 오른쪽은 항상 정렬이 되어있다는 것임.

따라서 이 피봇을 중심으로 좌 우 구간을 판단 하고 이 target이 그 구간에 존재 한느지 판단하면서 탐색 범위를 줄여가는 이분 탐색을 이용하여 문제를 풀었음

 

간단한 정리

1. mid기준으로 target이 좌 우 범위 중 어디 범위에 있는지 확인

2. 만약에 좌 우 범위 중 target이 있으면 target이 있는 범위를 탐색 

3. 만일 없다면 반대 쪽으로 탐색함

4. 탐색이 완료 되었다면 탐색 범위를 절반으로 감소 시켜서 다시 mid를 갱신한 후에 target을 찾음

 

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int arrSize = nums.size();

        int left = 0;
        int right = arrSize - 1;

        while(left <= right)
        {
            int mid = (left + right) / 2;

            // target을 찾은 경우
            if(nums[mid] == target)
            {
                return mid;
            }

            // mid 기준 오른쪽 구간이 정렬되어 있는 경우
            else if(nums[mid] < nums[right])
            {
                // target이 정렬된 오른쪽 구간에 있다면 오른쪽 탐색
                if(nums[mid] < target && target <= nums[right])
                {
                    left = mid + 1;
                }
                // 그렇지 않으면 왼쪽 탐색
                else
                {
                    right = mid - 1;
                }
            }

            // mid 기준 왼쪽 구간이 정렬되어 있는 경우
            else
            {
                // target이 정렬된 왼쪽 구간에 있다면 왼쪽 탐색
                if(nums[left] <= target && target < nums[mid])
                {
                    right = mid - 1;
                }
                // 그렇지 않으면 오른쪽 탐색
                else
                {
                    left = mid + 1;
                }
            }
        }

        // target을 찾지 못한 경우
        return -1;
    }
};

 

 

글 내용 중에 틀린 것이 있거나 궁금한 것이 있다면 댓글 남겨주세요! 봐주셔서 감사합니다.

'Algorithm > 문제풀이' 카테고리의 다른 글

LeetCode 4. Median of Two Sorted Arrays  (0) 2026.08.24
LeetCode 300. Longest Increasing Subsequence  (0) 2026.08.07
LeetCode 18. 4Sum  (0) 2026.08.05
LeetCode 329. Longest Increasing Path in a Matrix  (0) 2026.08.04
LeetCode 473. Matchsticks to Square  (0) 2026.07.31
'Algorithm/문제풀이' 카테고리의 다른 글
  • LeetCode 4. Median of Two Sorted Arrays
  • LeetCode 300. Longest Increasing Subsequence
  • LeetCode 18. 4Sum
  • LeetCode 329. Longest Increasing Path in a Matrix
뭘보느뇽
뭘보느뇽
  • 뭘보느뇽
    원기의 개발 발자취
    뭘보느뇽
  • 전체
    오늘
    어제
    • 분류 전체보기 (42)
      • Unity (5)
        • VR (5)
      • Algorithm (36)
        • 코딩테스트_합격자되기_인프런 _스터디 (10)
        • 문제풀이 (24)
        • 알고리즘 (2)
      • Experience (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    핸드트래킹
    6기 데브
    재귀
    백준
    Facial Tracking
    xreal
    Unity
    코딩테스트
    IOBT
    c#
    one grab interactable
    Meta Quest 2
    Meta Quest Pro
    oculus interaction sdk
    백트래킹
    코테
    뉴콘텐츠 아카데미 단기과정 1기
    C++
    코딩 테스트 합격자 되기
    Photon Fusion 1
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뭘보느뇽
LeetCode 33. Search in Rotated Sorted Array
상단으로

티스토리툴바