전체 방문자
오늘
어제
모달조아
Better than yesterday
모달조아
  • 분류 전체보기 (147)
    • PS (86)
      • BOJ (79)
      • 프로그래머스 (6)
    • 이론 (41)
      • 자료구조 (2)
      • 알고리즘 (8)
      • 데이터베이스 (1)
      • 운영체제 (1)
      • 네트워크 (3)
      • 디자인패턴 (7)
      • Java (13)
      • Spring (4)
      • JPA (1)
      • Git (1)
    • 개발 (18)
    • 프로젝트 (1)
    • 기록 (0)
      • 후기 (0)
    • etc (1)

최근 글

티스토리

hELLO · Designed By 정상우.
모달조아

Better than yesterday

PS/BOJ

BOJ 1920 수 찾기

2021. 6. 26. 02:59

boj 1920 수 찾기

예시로 A 배열에 '3 5 6 9 10 12 14 26 35 41' 이 주어졌다고 하고, 14가 있는지 알아본다고 하자. 입력 받은 후에 sort 함수를 이용해서 정렬하면 앞과 같이 정렬된 상태일 것이다. 원래 문제는 A 안에 14가 있는지만 확인하면 되지만, 14가 A 안에서 위치하는 인덱스를 반환하는 함수를 구현해보려고 한다. st와 en은 14가 있을 수 있는 범위의 처음과 끝 인덱스를 의미한다. mid는 (st+en)/2 이다. A[mid]와 14의 값을 비교하며 st와 en의 값을 계속 바꿔나갈 것이다.

  • 만약 A[mid] > 14 이면, 14는 mid와 en 사이에 있음이 자명하고, 그러므로 st = mid+1 이라고 할 수 있다.
  • 만약 A[mid] < 14 이면, 14는 st와 mid 사이에 있음이 자명하고, 그러므로 en= mid-1 이라고 할 수 있다.
  • 만약 A[mid] = 14 이면, mid 값을 반환한다.

찾고자 하는 값이 A 안에 있다면, 위와 같은 과정을 거쳐서 A[mid] = target 이 된다. 이 때, target이 A 안에 없다면 en < st가 될 것이다. 이렇게 되면 함수를 종료하고 -1을 반환한다.

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

int N;
int M;
int A[100005];

int BinarySearch(int target, int length)
{
    int st = 0;
    int en = length - 1;

    while (st <= en)
    {
        int mid = (st + en) / 2;
        if (A[mid] < target) st = mid + 1;
        else if (A[mid] > target) en = mid - 1;
        else return mid;
    }
    return -1;
}

int main(void)
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> N;
    for (int i = 0; i < N; i++) cin >> A[i];
    sort(A, A + N);
    cin >> M;

    while (M--)
    {
        int target;
        cin >> target;

        if (BinarySearch(target, N) == -1) cout << '0' << '\n';
        else cout << '1' << '\n';
    }
}
저작자표시

'PS > BOJ' 카테고리의 다른 글

BOJ 11727 2xN 타일링 2  (0) 2021.06.28
BOJ 11726 2xN 타일링  (0) 2021.06.28
BOJ 6603 로또  (0) 2021.06.25
BOJ 2667 단지번호붙이기  (0) 2021.06.25
BOJ 11652 카드  (0) 2021.06.25
    'PS/BOJ' 카테고리의 다른 글
    • BOJ 11727 2xN 타일링 2
    • BOJ 11726 2xN 타일링
    • BOJ 6603 로또
    • BOJ 2667 단지번호붙이기
    모달조아
    모달조아

    티스토리툴바