◆C#/C# : 백준 문제 풀이

[백준] C++ & C# 숫자 카드 2 (10816번)

진2_ 2024. 9. 20. 17:10
728x90
반응형
 

[백준] C++ & C# 숫자 카드 2 (10816번) 실버 4

 

 

📝 문제


숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적힌 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오.

 

 

🔎 입력


첫째 줄에 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다.
둘째 줄에 숫자 카드에 적혀있는 정수가 주어진다.
셋째 줄에 M(1 ≤ M ≤ 500,000)이 주어진다.
넷째 줄에는 M개의 정수가 주어진다. 이 숫자가 상근이가 가지고 있는 숫자 카드인지 확인해야 한다.
카드에 적혀있는 숫자의 범위는 -10,000,000부터 10,000,000까지이다.

 

 

🔎 출력


각 수에 대해 상근이가 가지고 있는 숫자 카드의 개수를 출력한다.

 

 

🎀 입출력 예시

 

코드

 

c++

 

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

int main() {
    int n; // 1번 배열 갯수 
    
    cin >> n ; // 배열의 크기 입력 받음 
    int arr1[n]; //  첫번째 배열을 입력받은 크기만큼 생성 
    
    for (int i = 0; i < n; i++){
        cin >> arr1[i];
    }
    
    sort(arr1,arr1 + n); // 배열 정렬 
    
    int m; // 2번 배열 갯수 
    
    cin >> m ; // 배열의 크기 입력 받음 
    int arr2[m]; //  두번째 배열을 입력받은 크기만큼 생성 
    
    for (int i = 0; i < m; i++){
        cin >> arr2[i];
    }
    
    for(int i = 0; i< m ; i++){
        int upper = upper_bound(arr1,arr1 + n,arr2[i]) - arr1;
        int lower = lower_bound(arr1,arr1 + n, arr2[i]) - arr1;
        cout << upper - lower <<' ';
    }
}

 

 

c#

using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        int n = int.Parse(Console.ReadLine());
        int[] arr1 = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
        Array.Sort(arr1);

        int m = int.Parse(Console.ReadLine());
        int[] arr2 = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);

        foreach (int num in arr2)
        {
            int upper = Array.BinarySearch(arr1, num + 1);
            int lower = Array.BinarySearch(arr1, num);

            upper = upper < 0 ? ~upper : upper;
            lower = lower < 0 ? ~lower : lower;

            Console.Write((upper - lower) + " ");
        }
    }
}
728x90
반응형