[코딩테스트 스터디/C++] Amazon인터뷰 고정점 찾기

최대 1 분 소요

1.문제

고정점이란, 수열의 원소 중에서 그 값이 인덱스와 동일한 원소를 의미한다. 예를 들어 수열 a = {-15,-4,2,8,13}이 있을 때 a[2]=2이므로, 고정점은 2가 된다. 하나의 수열이 N개의 서로 다른 원소를 포함하고 있으며, 모든 원소가 오름차순으로 정렬되어 있다. 이때 이 수열에서 고정점이 있다면 고정점을 출력하고 없다면 -1을 출력한다. 고정점은 최대 1개만 존재한다.



2. 풀이 전 계획과 생각

  • 이진 탐색 사용



3. 풀이

#include<iostream>
#include<vector>
using namespace std;

int binarySearch(vector<int>& arr, int start, int end) {
    if (start > end) return -1;
    int mid = (start + end) / 2;
    // 고정점을 찾은 경우 중간점 인덱스 반환  
    if (arr[mid] == mid) return mid;
    // 중간점의 값보다 중간점이 작은 경우 왼쪽 확인
    else if (arr[mid] > mid) return binarySearch(arr, start, mid - 1);
    // 중간점의 값보다 중간점이 큰 경우 오른쪽 확인
    else return binarySearch(arr, mid + 1, end);
}

int main(){
	int N;	
	cin>>N;
	
	vector<int> v(N);
	
	for(int i=0;i<N;i++) cin>>v[i];
	
	// 이진탐색
    int ans = binarySearch(v , 0, N - 1);

    // 답 출력 
    cout << ans << '\n';
}



4. 풀이하면서 고민했던 점

  • 없음



5. 문제를 풀고 알게된 개념 및 소감

  • 이진탐색 구현을 복습할 수 있었음