문제 링크

11441번: 합 구하기 (acmicpc.net)

 

11441번: 합 구하기

첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는

www.acmicpc.net


문제

N개의 수 A1, A2, ..., AN이 입력으로 주어진다. 총 M개의 구간 i, j가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.


입력

첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는 각 구간을 나타내는 i와 j가 주어진다. (1 ≤ i ≤ j ≤ N)


출력

총 M개의 줄에 걸쳐 입력으로 주어진 구간의 합을 출력한다.



#include <stdio.h>

int main()
{
    int n, m, a[100001], s[100001] = { 0 };

    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
        s[i] = s[i - 1] + a[i];
    }

    scanf("%d", &m);
    while (m--)
    {
        int x, y;
        scanf("%d %d", &x, &y);
        printf("%d\n", s[y] - s[x - 1]);
    }
}

문제 링크

11659번: 구간 합 구하기 4 (acmicpc.net)

 

11659번: 구간 합 구하기 4

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j

www.acmicpc.net


문제

수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.


입력

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.


출력

총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.


제한

  • 1 ≤ N ≤ 100,000
  • 1 ≤ M ≤ 100,000
  • 1 ≤ i ≤ j ≤ N


#include <stdio.h>

int main()
{
    int n, m, a[100001], s[100001] = { 0 };

    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
        s[i] = s[i - 1] + a[i];
    }

    while (m--)
    {
        int x, y;
        scanf("%d %d", &x, &y);
        printf("%d\n", s[y] - s[x - 1]);
    }
}

 

문제 링크

 

26168번: 배열 전체 탐색하기

크기 n인 정수형 배열 A가 주어진다. 배열 A의 원소는 A[0], A[1], ... , A[n-1]이다. 배열 A에는 같은 값을 갖는 원소가 여러 개 존재할 수 있다. 배열 A에 대한 m개의 질의가 저장된 배열 B가 주어진다.

www.acmicpc.net


문제

크기 n인 정수형 배열 A가 주어진다. 배열 A의 원소는 A[0], A[1], ... , A[n-1]이다. 배열 A에는 같은 값을 갖는 원소가 여러 개 존재할 수 있다. 배열 A에 대한 m개의 질의가 저장된 배열 B가 주어진다. 배열 B에 저장된 m개의 질의는 아래 세 가지 유형으로 구분된다. 첫 번째가 유형 1, 두 번째가 유형 2, 세 번째가 유형 3이다.

  • 1 k: 배열 A의 원소 중 k보다 크거나 같은 원소의 개수를 출력한다.
  • 2 k: 배열 A의 원소 중 k보다 큰 원소의 개수를 출력한다.
  • 3 i j: 배열 A의 원소 중 i보다 크거나 같고 j보다 작거나 같은 원소의 개수를 출력한다.

배열 B에 저장된 첫 번째 질의부터 m번째 질의까지 순서대로 처리하면서 질의 결과를 출력하자.


입력

첫 번째 줄에 n과 m이 공백을 사이에 두고 순서대로 주어진다.

두 번째 줄에 배열 A의 원소 A[0], A[1], ... , A[n-1]이 공백을 사이에 두고 순서대로 주어진다.

세 번째 줄부터 m개의 줄에 걸쳐 배열 B에 저장된 m개의 질의가 순서대로 주어진다. 한 줄에 하나의 질의를 나타내는 정수가 공백을 사이에 두고 순서대로 주어진다.


출력

첫 번째 줄부터 질의 결과를 순서대로 한 줄씩 출력한다.




#include <stdio.h>
typedef long long ll;
ll a[100004];
int n;

int A(ll a1)
{
    int count = 0;
    for (int i = 0; i < n; i++) if (a[i] >= a1) count++;
    return count;
}

int B(ll b)
{
    int count = 0;
    for (int i = 0; i < n; i++) if (a[i] > b) count++;
    return count;
}

int C(ll c1, ll c2)
{
    int count = 0;
    for (int i = 0; i < n; i++) if (a[i] >= c1 && a[i] <= c2) count++;
    return count;
}

int main()
{
    int m;

    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++) scanf("%lld", &a[i]);

    for (int i = 0; i < m; i++)
    {
        int op;
        scanf("%d", &op);
        if (op == 1)
        {
            ll x;
            scanf("%lld", &x);
            printf("%d\n", A(x));
        }
        else if (op == 2)
        {
            ll x;
            scanf("%lld", &x);
            printf("%d\n", B(x));
        }
        else
        {
            ll x, y;
            scanf("%lld %lld", &x, &y);
            printf("%d\n", C(x, y));
        }
    }
}

'코딩 > 코딩(코딩 문제, 알고리즘 등등)' 카테고리의 다른 글

백준 11441(합 구하기)  (0) 2023.01.22
백준 11659(구간 합 구하기 4)  (0) 2023.01.22
백준 4673(셀프 넘버)  (2) 2022.05.18
백준 15596(정수 N개의 합)  (0) 2022.05.18
백준 15552(빠른 A+B)  (0) 2022.05.18
백준 3009(네 번째 점)  (0) 2022.01.25

문제 링크

4673번: 셀프 넘버 (acmicpc.net)

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net



#include <iostream>
using namespace std;
#define SIZE 10000
int main()
{
    int d, temp;
    bool a[SIZE + 1] = {};
    for (int i = 1; i <= SIZE; i++)
    {
        temp = i;
        d = i;
        while (temp)
        {
            d += temp % 10;
            temp /= 10;
        }
        if (d <= SIZE)
        {
            a[d] = true;
        }
    }
    for (int i = 1; i <= SIZE; i++)
    {
        if (!a[i])
        {
            printf("%d\n", i);
        }
    }
}

문제 링크

15596번: 정수 N개의 합 (acmicpc.net)

 

15596번: 정수 N개의 합

C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Go, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang)

www.acmicpc.net



#include<stdio.h>
#include <vector>
using namespace std;

long long sum(std::vector<int>& a)
{
    long long ans = 0;
    for (int i = 0; i < a.size(); i++)
    {
        ans += a[i];
    }
    return ans;
}

+ Recent posts