본문 바로가기
SBS아카데미/게임프로그래밍

[C++ - TIL] Git 협업 프로세스와 이분 탐색의 논리적 구조 이해

by musukie 2025. 8. 20.

🎮 주제 : Git 협업 프로세스와 이분 탐색의 논리적 구조 이해

태그 : #C++ #알고리즘 #이분탐색 #Git #브랜치 #충돌해결 #프로그래밍기초


📌 학습 요약

  • Git 브랜치와 협업 : 메인 코드에 영향을 주지 않고 독립적으로 기능을 개발하는 Branch의 개념과, 동일한 코드를 수정했을 때 발생하는 **Conflict(충돌)**의 해결 메커니즘 숙지
  • 이분 탐색(Binary Search) : 반드시 정렬된 데이터에서 중간값(Pivot)을 기준으로 탐색 범위를 절반씩 줄여나가는 $O(\log n)$ 효율의 탐색 알고리즘 정립
  • 제어문의 명확한 구분 : 함수 자체를 끝내는 return과 현재 루프만 탈출하는 break의 차이를 이해하고 알고리즘 목적에 맞는 적절한 키워드 선택 방법 습득
  • 투 포인터(Two Pointer)의 실체 : 메모리 주소값이 아닌, 배열의 인덱스를 가리키는 두 개의 변수(left, right)를 조작하여 범위를 제어하는 기법의 개념 정립

🛠 주요 코드 및 구현 상세

1. 이분 탐색(Binary Search) 핵심 로직

while (left <= right) {
    // 1. 기준점(pivot) 설정: 검색 범위의 중간 인덱스
    int pivot = (left + right) / 2;

    // 2. 일치 여부 확인
    if (list[pivot] == key) {
        cout << "Found the key" << endl;
        cout << "Index : " << pivot << endl;
        return; // 찾았으므로 함수 전체를 즉시 종료
    }
    // 3. 범위 축소: key가 pivot보다 크면 오른쪽 영역 탐색
    else if (list[pivot] < key) {
        left = pivot + 1;
    }
    // 4. 범위 축소: key가 pivot보다 작으면 왼쪽 영역 탐색
    else {
        right = pivot - 1;
    }
}

// 루프를 다 돌아도 못 찾은 경우
cout << "Not key found" << endl;

✅ 주요 문법 및 개념 정리

키워드 특징 활용 사례

return 함수 실행을 즉시 중단하고 호출부로 복귀 탐색 성공 시 추가 연산 방지
break 가장 가까운 반복문 하나를 탈출 특정 조건 충족 시 루프만 중단
Continue 현재 반복의 남은 코드를 건너뛰고 다음 반복으로 진행 특정 데이터만 제외하고 처리할 때 사용
pivot 탐색의 기준이 되는 중간 지점 이분 탐색, 퀵 정렬의 성능 결정 요소
Conflict <<<<<<<, =======, >>>>>>> 표시 발생 병합 시 소스 코드 불일치 수동 해결 필요

💡 Git 충돌 해결 프로세스

  1. 충돌 발생 확인 및 해당 파일 열기
  2. Git이 남긴 마커를 기준으로 남길 코드를 선택하고 마커 삭제
  3. git add [파일명]으로 해결 완료 표시
  4. git commit을 통해 병합 완료

✨ 느낀 점

  • return과 break의 차이를 모호하게 알고 있었으나, 함수 종료와 반복문 종료라는 명확한 경계를 정리하여 논리적 오류를 예방하게 됨
  • Git의 충돌은 에러가 아니라 협업 과정에서 발생하는 자연스러운 대화 과정임을 이해하게 되었고, 마커를 직접 수정하는 방식이 익숙해짐
  • 주석을 간결하고 명확하게 다는 작은 습관이 복잡한 알고리즘의 흐름을 파악하는 데 큰 힘이 된다는 것을 다시금 느낌
  • 추상적이었던 pivot의 개념이 이분 탐색의 '기준점' 역할을 수행하는 것을 직접 코딩하며 명확히 체득함