Plite
전자오락 공방
Plite
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 프로젝트 (18)
      • 완성 프로젝트 (3)
      • 프로젝트 진행 내역 (15)
    • 공부 및 정리 (241)
      • 백준 코드 (222)
      • C++ (8)
      • DirectX (2)
      • Unreal Engine (6)
      • 프로그래밍 패턴 (3)
    • 기타 (12)
      • 기타 주저리 (10)
    • 게임과 취미 (1)
    • 대문 (1)

블로그 메뉴

  • 홈
  • 프로젝트
  • 취미, 일상
  • 백준 프로필

공지사항

  • [Read Me]
  • 제 블로그에 방문하신 것을 환영합니다.

인기 글

태그

  • KMP
  • 스택
  • 그래프
  • 위상 정렬
  • 동적계획법
  • 세그먼트 트리
  • LCA
  • 트리
  • 정렬
  • 구현
  • 조합론
  • 브루트포스
  • 백준
  • UC++
  • 기하
  • 백트래킹
  • 수학
  • 트라이
  • 이분탐색
  • 우선순위큐
  • 분할정복
  • 투포인터
  • 누적합
  • 큐
  • 유니온 파인드
  • 정수론
  • 문자열
  • 최소 스패닝 트리
  • C++
  • SCC

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Plite

전자오락 공방

[C++]백준 - 1920번 문제
공부 및 정리/백준 코드

[C++]백준 - 1920번 문제

2021. 6. 17. 18:46

1920번: 수 찾기 (acmicpc.net)

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

 

1920번 : 수 찾기


N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.

 

입력


첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.

 

 

출력


M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.

 

 

 


 

생각해 볼 점


이분 탐색의 기초 문제

정렬 후 이분 탐색합니다.

 

cout과 cin을 그냥 사용하면 시간 초과가 날 수 있으므로 주의합니다.

 

코드


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

int main() {
	int N, M;
	vector<int> v;
	scanf("%d", &N);
	for(int i = 0; i < N; i++)
	{
	    int input;
	    scanf("%d", &input);
	    v.push_back(input);
	}
	sort(v.begin(), v.end());    //정렬
	scanf("%d", &M);
	for(int i = 0; i < M; i++)
	{
	    int target;
	    scanf("%d", &target);
	    int left = 0;
	    int right = N;
	    int is_exist = 0;
	    while(true)
	    {
	        int index = (right + left) / 2;    //이분탐색
	        if(v[index] == target)
	        {
	            is_exist = 1;
	            break;
	        }
	        else if(index == left) break;
	        else if(v[index] < target) left = index;
	        else right = index;
	    }
	    printf("%d\n", is_exist);
	}
	return 0;
}

 

그 외


 

'공부 및 정리 > 백준 코드' 카테고리의 다른 글

[C++]백준 - 1932번 문제  (0) 2021.06.18
[C++]백준 - 1149번 문제  (0) 2021.06.17
[C++]백준 - 5430번 문제  (0) 2021.06.17
[C++]백준 - 1021번 문제  (0) 2021.06.17
[C++]백준 - 11866번 문제  (0) 2021.06.10
    '공부 및 정리/백준 코드' 카테고리의 다른 글
    • [C++]백준 - 1932번 문제
    • [C++]백준 - 1149번 문제
    • [C++]백준 - 5430번 문제
    • [C++]백준 - 1021번 문제
    Plite
    Plite
    개발 일지, 게임 이야기 등을 적어두는 공간입니다.

    티스토리툴바