[백준] 1920번 : 수 찾기 | binary search (C++)

2024. 4. 1. 18:27·Programming/C++ - 백준
반응형

문제


풀이

C++ 내 내장되어 있는 binary_search( ) 함수를 이용해 풀이했다.

시간복잡도는 O(logn)으로 빠른 속도로 계산할 수 있다.

 

입력받는 정수의 범위가 2의 31승까지 이므로 long long으로 선언한다.

 

	int n, m;
	long long listnum, findnum;
    
        cin >> n;

 

 

vector을 이용해 입력받은 값을 저장한다.

 

 	vector<int> listv;

        for (int i = 0; i < n; i++) {
		cin >> listnum;
		listv.push_back(listnum);
	}

 

 

binary search는 가운데에 있는 값(중간 크기의 값)을 기준으로 정렬하기 때문에, 꼭 오름차순 혹은 내림차순으로 정렬해야 한다.

따라서, sort() 함수를 이용해 정렬한 후 bianry_search() 함수를 사용한다.

 

        binary_search(listv.begin(), listv.end(), findnum);

 

 

vector listv의 처음부터 끝까지 findnum이 있는지 확인하고 있으면 true, 없으면 false를 반환하는 코드이다.

 

	sort(listv.begin(), listv.end());

	cin >> m;

	for (int i = 0; i < m; i++) {
		cin >> findnum;

		bool isFound = binary_search(listv.begin(), listv.end(), findnum);	// binary search를 사용할 때는 먼저 오름차순, 내림차순 정렬을 해줘야 함.
		// vector listv의 처음부터 끝까지 findnum이 있는지 확인하고 있으면 true, 없으면 false 반환
        cout << isFound << "\n";
	}

 

 


코드

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

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

	int n, m;
	long long listnum, findnum;
	vector<int> listv;

	cin >> n;

	for (int i = 0; i < n; i++) {
		cin >> listnum;
		listv.push_back(listnum);
	}

	sort(listv.begin(), listv.end());

	cin >> m;

	for (int i = 0; i < m; i++) {
		cin >> findnum;

		bool isFound = binary_search(listv.begin(), listv.end(), findnum);	// binary search를 사용할 때는 먼저 오름차순, 내림차순 정렬을 해줘야 함.
		cout << isFound << "\n";
	}
	return 0;
}

결과

https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

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

www.acmicpc.net

 

반응형
저작자표시 (새창열림)

'Programming > C++ - 백준' 카테고리의 다른 글

1764번 - 듣보잡 | 시간초과, binary search (C++)  (3) 2024.04.03
[백준] 10816번 : 숫자 카드 2 | binary search & unordered map (C++)  (4) 2024.04.01
[백준] C++로 풀이 시 시간 초과가 난다면?  (2) 2024.03.28
[백준] 1431번 : 시리얼 번호 | vector 구조체 (C++)  (3) 2024.03.18
[백준] 11656번 : 접미사 배열 | string.substr() 함수를 이용한 '부분 문자열 추출' (C++)  (1) 2024.03.14
'Programming/C++ - 백준' 카테고리의 다른 글
  • 1764번 - 듣보잡 | 시간초과, binary search (C++)
  • [백준] 10816번 : 숫자 카드 2 | binary search & unordered map (C++)
  • [백준] C++로 풀이 시 시간 초과가 난다면?
  • [백준] 1431번 : 시리얼 번호 | vector 구조체 (C++)
지구코드
지구코드
IT를 공부하고 있는 지구의 코딩공간입니다!
  • 지구코드
    지구의 코딩공간
    지구코드
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 개발 기록
      • [프디아] 파이널 프로젝트
      • Back-end
        • Spring
        • Django
      • Programming
        • 알고리즘
        • C++ - 백준
      • Cloud
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    프디아
    정렬
    awscloudclubs
    알파코
    이진탐색
    EC2
    피보나치 수
    binary_search
    시간복잡도
    시간초과
    신한투자증권
    다이내믹 프로그래밍
    별 찍기
    큐
    백준
    edgelocation
    AWS
    MSA
    fill 함수
    Cloud
    구조체 벡터
    KDT교육
    부트캠프
    dp
    알파코캠퍼스
    k디지털트레이닝
    프로디지털아카데미
    C++
    슬라이딩윈도우
    부분 문자열 추출
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
지구코드
[백준] 1920번 : 수 찾기 | binary search (C++)
상단으로

티스토리툴바