Skip to content

Conversation

@kangrae-jo
Copy link
Collaborator

@kangrae-jo kangrae-jo commented Jul 31, 2025

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

[๋‘ ๋ฐฐ์—ด์˜ ํ•ฉ]

โœ”๏ธ ์†Œ์š”๋œ ์‹œ๊ฐ„

1h

โœจ ์ˆ˜๋„ ์ฝ”๋“œ

์ด๋ฒˆ์ฃผ ํ† ์š”์ผ์— ๋ชป์˜ฌ๋ฆด๊ฒƒ ๊ฐ™์•„์„œ ๋ฏธ๋ฆฌ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค...

์˜ค๋Š˜ ๋ฌธ์ œ๋Š” ๋ˆ„์ ํ•ฉ ๊ด€๋ จ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๋„ ๋ฐฉ๋ฒ•์„ ์•Œ๋ฉด ์•„ํ•˜! ํ•˜๊ณ  ๋ฒˆ๋œฉ์ด์‹ค๊ฒ๋‹ˆ๋‹ค.

์ €๋Š” ์ฒ˜์Œ์— 2์ฐจ์› ๋ฐฐ์—ด์— DP์ฒ˜๋Ÿผ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ์„ ๋”ํ•ด๋†“์œผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ์š”.. ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ €์žฅ์€ ์–ด๋–ป๊ฒŒ๋“  ํ•œ๋‹คํ•ด๋„, ๋‚˜์ค‘์— ๊ทธ ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ๋“ค์„ ์กฐํ•ฉํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด์—์š”.

๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ์ด ์•ˆ๋‚˜์„œ ์ด๋ฆฌ์ €๋ฆฌ ์ฐพ์•„๋ณด๋˜ ์ค‘ ์ œ๊ฐ€ ์˜ˆ์ „์— ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ’€์—ˆ๋˜ ๋ฌธ์ œ๊ฐ€ ๋– ์˜ค๋ฅด๋”๊ตฐ์š”.
[ํ•ฉ์ด 0์ธ ๋„ค ์ •์ˆ˜]
์ด ๋ฌธ์ œ๋ž‘ ํ’€์ด๊ฐ€ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค.
๋ฐ”๋กœ ์ƒ๊ฐ๋‚˜์ง€ ์•Š๋Š”๊ฑธ ๋ณด๋‹ˆ ์ €๋Š” ๊ณต๋ถ€๋ฅผ ์ œ๋Œ€๋กœ ์•ˆํ–ˆ๋‚˜๋ด์š”..

๊ทธ๋ž˜์„œ ์ฐพ์•„๋‚ธ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”.

  1. 2์ฐจ์› ๋ฐฐ์—ด์— ๋ถ€๋ถ„ ํ•ฉ์„ ๊ตฌํ•ด๋†“์ง€ ๋ง๊ณ  1์ฐจ์› ๋ฐฐ์—ด์— ์ญ‰ ๋Š˜์–ด๋†“์ž.
  2. ๋Š˜์–ด๋†“์€ ๋ถ€๋ถ„ ํ•ฉ๋“ค์˜ ์™ผ์ชฝ ๋, ์˜ค๋ฅธ์ชฝ ๋์—์„œ ์‹œ์ž‘ํ•˜๋Š” ํˆฌํฌ์ธํ„ฐ ํƒ์ƒ‰!
  3. ํƒ์ƒ‰ ์ค‘ T์™€ ๋™์ผํ•œ ๋ถ€๋ถ„ ํ•ฉ์˜ ํ•ฉ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด answer++;

์•„๋งˆ ๋ฌธ์ œ๋ฅผ ์ข€ ์˜ค๋ž˜ ๊ณ ๋ฏผํ•ด๋ณด์…จ๋‹ค๋ฉด ์œ„์˜ ๋กœ์ง์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์—์š”.
์ด ๋ฌธ์ œ ํ‘ธ์‹  ๋ถ„๋“ค์€ [ํ•ฉ์ด 0์ธ ๋„ค ์ •์ˆ˜]์ด๊ฒƒ๋„ ํ’€์–ด๋ณด์…”์„œ ๋ฌดํ•œ์œผ๋กœ ์ฆ๊ธฐ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ €์ฒ˜๋Ÿผ ๋ฐฉ์‹์„ ๊นŒ๋จน์ง€ ์•Š๋„๋ก ๊ธฐ๋ก๋„ ์ž˜ ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์•„ ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด์— upper_bound , lower_boundํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์€ ํ’€์ด๋„ ๊ฐ€๋Šฅํ•˜๋‹ˆ ์ฐธ๊ณ  ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    long long answer = 0;
    for (int i = 0; i < subA.size(); i++) {
        int target = T - subA[i];
        auto lower = lower_bound(subB.begin(), subB.end(), target);
        auto upper = upper_bound(subB.begin(), subB.end(), target);
        answer += (upper - lower);
    }

๋‘ ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ์ด T ์ผ๋–„ while๋ฌธ์œผ๋กœ ์ค‘๋ณต์„ ์ฒดํฌํ•ด์ฃผ๋˜ ๋ถ€๋ถ„๊ณผ left++ , right-- ํ•˜๋˜ ๋กœ์ง์„ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ์–ด์š”.
๋งค๋ฒˆ ์ด๋ถ„ ํƒ์ƒ‰์„ ํ•˜๊ธฐ ๋–„๋ฌธ์— ์ œ๊ฐ€ ํŒŒ์ผ๋กœ ์˜ฌ๋ ค๋†“์€ ์ฝ”๋“œ(ํˆฌํฌ์ธํ„ฐ)๋ณด๋‹ค๋Š” ๋А๋ฆฝ๋‹ˆ๋‹ค.

์ด๋ถ„ ํƒ์ƒ‰์€ subB๋งŒ ์ •๋ ฌ ํ•˜๋ฉด ๋ผ์„œ ์ข€ ๋” ๋น ๋ฅด์ง€๋งŒ, ๋ฉ”์ธ ๋กœ์ง์—์„œ O(Nยฒ log M) ์ž…๋‹ˆ๋‹ค.
ํˆฌ ํฌ์ธํ„ฐ๋Š” O(Nยฒ + Mยฒ) ์ด์ฃ .

์ด๋ถ„ํƒ์ƒ‰์€ ์ฝ”๋“œ๊ฐ€ ์›Œ๋‚™ ๊ฐ„๊ฒฐํ•˜๋‹ˆ ์ถฉ๋ถ„ํžˆ ์žฅ์ ์ด ์žˆ๋Š”๊ฒƒ ๊ฐ™์•„์š”.

๐Ÿ“š ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ

2์ฐจ์› ๋ฐฐ์—ด์— ๋ถ€๋ถ„ํ•ฉ์„ ๊ตฌํ•ด๋†“๋Š”๋‹ค๋Š” ๊ณ ์ •๊ด€๋… ๊บ ๊ธฐ
์˜ˆ์ „์— ํ’€์—ˆ๋˜ ๋ฌธ์ œ ๊ผญ๊ผญ์”น์–ด๋จน๊ธฐ

Copy link
Member

@9kyo-hwang 9kyo-hwang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋งค ๋ฒˆ ๋ถ€๋ถ„ ๋ฐฐ์—ด ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ฑด ๋ฌด์กฐ๊ฑด ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚˜๋‹ˆ๊นŒ ๋ฏธ๋ฆฌ ์บ์‹ฑ์„ ํ•ด๋†“์•„๊ฒ ๋‹ค -> ๋ถ€๋ถ„ํ•ฉ
์ด ๋ถ€๋ถ„์€ ์บ์น˜ํ–ˆ๋Š”๋ฐ ๊ทธ ๋‹ค์Œ์€ ์–ด์ผ€ ํ‘ธ๋…ธ.... ์ด๋Ÿฌ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ 'ํ•ฉ์ด 0์ธ ๋„ค ์ •์ˆ˜' ๋ฌธ์ œ์™€ ๋น„์Šทํ•˜๋‹ค๋Š” ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋ณด๊ณ  ๊ฐ์„ ์žก์•˜๋„ค์š”.

์•ฝ๊ฐ„ ์–ด๊ฑฐ์ง€?๋ผ๊ณ  ๋ณด์ผ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ํˆฌํฌ์ธํ„ฐ๋‚˜ ์ด์ง„ ํƒ์ƒ‰ ์•ˆ์“ฐ๊ณ  ๋‹จ์ˆœํžˆ ํ•œ ์ชฝ ๋ถ€๋ถ„ํ•ฉ ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ map์— ๋‹ค ๋•Œ๋ ค ๋ฐ•์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€ ํ•œ ์ชฝ ๋ถ€๋ถ„ํ•ฉ ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ, T - (๊ฒฝ์šฐ์˜ ์ˆ˜)๊ฐ€ map์— ์กด์žฌํ•˜๋Š” ์ง€ ์ฒดํฌํ•ด์„œ ๊ทธ ๊ฐœ์ˆ˜๋งŒํผ ๋”ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

#include <bits/stdc++.h>
using namespace std;
using int64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int64 T; cin >> T;
    
    int n; cin >> n;
    vector<int64> A(n), prefixA(n + 1, 0);
    for(int i = 0; i < n; ++i) {
        cin >> A[i];
        prefixA[i + 1] = prefixA[i] + A[i];
    }
    
    int m; cin >> m;
    vector<int64> B(m), prefixB(m + 1, 0);
    for(int i = 0; i < m; ++i) {
        cin >> B[i];
        prefixB[i + 1] = prefixB[i] + B[i];
    }
    
    unordered_map<int, int64> numSubset;
    numSubset.reserve(n * n);
    
    for(int i = 0; i < n; ++i) {
        for(int j = i + 1; j <= n; ++j) {
            ++numSubset[prefixA[j] - prefixA[i]];
        }
    }
    
    int64 ans = 0;
    for(int i = 0; i < m; ++i) {
        for(int j = i + 1; j <= m; ++j) {
            int64 val = prefixB[j] - prefixB[i];
            if(numSubset.count(T - val)) {
                ans += numSubset.at(T - val);
            }
        }
    }
    
    cout << ans;

    return 0;
}

๋‹ค๋งŒ ์ž๋ฃŒํ˜• ๋•Œ๋ฌธ์— 4ํŠธ ๊ทธ๋ƒฅ ๋‚ ๋ ค๋จน์€๊ฑด ์•ˆ๋น„๋ฐ€... ใ…Ž

Copy link
Collaborator

@kokeunho kokeunho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ €๋„ ๋ฐฐ์—ด a, b ๊ฐ๊ฐ ์ด์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๋ˆ„์ ํ•ฉ์„ ์ €์žฅํ•ด๋‘๊ณ 
์ด์ฐจ์› ๋ฐฐ์—ด์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ํ•ฉ์ด T๊ฐ€ ๋˜๋Š” ์กฐํ•ฉ์„ ์ฐพ์œผ๋ ค ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทผ๋ฐ ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n^2 * m^2)๊ฐ€ ๋ผ์„œ ํ‹€๋ฆฐ ํ’€์ด์˜€์Šต๋‹ˆ๋‹ค.

์ข€ ๊ณ ๋ฏผํ•ด๋ณด๋‹ค ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ–ˆ๋Š”๋ฐ
์ƒ๊ฐ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•œ ํ’€์ด์˜€์Šต๋‹ˆ๋‹ค.

์šฐ์„  ๊ฐ•๋ž˜๋‹˜๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ฐฐ์—ด a, b์˜ ๋ฒ”์œ„๋ณ„ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ˆ„์ ํ•ฉ์„ ๋ชจ๋‘ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค (sumA, sumB).
๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ €๋Š” Map์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
sumB๋ฅผ Map ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ๋ˆ„์ ํ•ฉ ๊ฐ’๋งˆ๋‹ค ๋™์ผํ•œ ๊ฐ’์ด ๋ช‡ ๊ฐœ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
->๋ˆ„์ ํ•ฉ์˜ ๊ฐ’์„ key๋กœ ๋™์ผํ•œ ๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ value๋กœ Map์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  sumA๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ sumB์—์„œ T-sumA_i์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋“ค์„
์ตœ์ข… ๋‹ต์•ˆ ๋ณ€์ˆ˜์— ๋”ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ๋ฌธ์ œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค!

Details

import java.util.*;

public class Main {
    static int T, n, m;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        T = sc.nextInt();
        n = sc.nextInt();
        int[] arrA = new int[n];
        for (int i = 0; i < n; i++) {
            arrA[i] = sc.nextInt();
        }
        m = sc.nextInt();
        int[] arrB = new int[m];
        for (int i = 0; i < m; i++) {
            arrB[i] = sc.nextInt();
        }

        List<Integer> sumA = findAllSums(arrA);
        List<Integer> sumB = findAllSums(arrB);

        Map<Integer, Integer> countB = new HashMap<>();
        for (int sum : sumB) {
            countB.put(sum, countB.getOrDefault(sum, 0) + 1);
        }

        long answer = 0;
        for (int sum : sumA) {
            answer += countB.getOrDefault(T-sum, 0);
        }

        System.out.print(answer);
    }
    static List<Integer> findAllSums(int[] arr) {
        List<Integer> response = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            int sum = 0;
            for (int j = i; j < arr.length; j++) {
                sum += arr[j];
                response.add(sum);
            }
        }

        return response;
    }
}

Copy link
Collaborator

@g0rnn g0rnn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋ˆ„์ ํ•ฉ + ํˆฌํฌ์ธํ„ฐ, ๋ˆ„์ ํ•ฉ + ์ด์ง„ํƒ‘์ƒ‰์œผ๋กœ ํ’€์–ด์•ผํ•œ๋‹ค.! ๋Š” ๋А๊ปด์กŒ์ง€๋งŒ ์ง์ ‘์ ์ธ ์†”๋ฃจ์…˜์ด ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์• ์ดˆ์— ๋ˆ„์ ํ•ฉ์„ 1~i๊นŒ์ง€์˜ ํ•ฉ๋งŒ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฐจํ”ผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ตฌ๊ฐ„์˜ ํ•ฉ์€ ๋ˆ„์ ํ•ฉ์˜ index ์ ‘๊ทผ์œผ๋กœ ์ƒ์ˆ˜ ์‹œ๊ฐ„ ๋‚ด์— ๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ฌธ์ œ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ด์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ถ€๋ถ„ํ•ฉ์„ ๊ตฌํ•  ์ƒ๊ฐ์„ ๋ชปํ–ˆ๋˜๊ฑฐ์ฃ ..

๊ทธ๋ ‡๊ฒŒ ์†”๋ฃจ์…˜์„ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ์–‘๋์˜ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ๊ฐ€์ž! ์ด๋Ÿฐ ์ƒ๊ฐ๊นŒ์ง€ ํ–ˆ์ง€๋งŒ.. ๋ฌธ์ œ๋ฅผ ๋ณด๋‹ˆ ๋‘ ๋ฐฐ์—ด์˜ ๋ถ€๋ถ„ํ•ฉ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ๋˜์–ด์žˆ์–ด.. ๊ทธ๋ƒฅ ๋‹ต์„ ๋ดค์Šต๋‹ˆ๋‹ค.

๊ฐ•๋ž˜๋‹˜์˜ ์„ค๋ช…์„ ๋“ฃ๊ณ ๋„ ์ดํ•ด๋˜์ง€ ์•Š์•„ ์ฝ”๋“œ๋กœ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ถ„ํ•ฉ ๊ตฌํ•˜๊ธฐ + ์ •๋ ฌ + ๋ฒ”์œ„ ์ค„์ด๊ธฐ ์ด๋ ‡๊ฒŒ ํฐ ๋กœ์ง์œผ๋กœ ๋ณด๋‹ˆ ์†”๋ฃจ์…˜์ด ๋‹จ๋ฒˆ์— ์ƒ๊ฐ๋‚˜๋”๊ตฐ์š”

(while๋กœ ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ํ•ฉ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์‹ค์ œ ๋ฌธ์ œํ’€์ด ๋•Œ ์ ˆ๋Œ€ ์ƒ๊ฐํ•ด๋‚ด์ง€ ๋ชปํ–ˆ์„๊ฑฐ ๊ฐ™๋„ค์š”..ํ—ˆํ—ˆ)

๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค~

package beakjoon;

import java.util.*;
import java.io.*;

public class Sol2143 {
    static int T, n, m;
    static int[] a, b;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        T = Integer.parseInt(br.readLine());
        n = Integer.parseInt(br.readLine());
        a = new int[n];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            a[i] = Integer.parseInt(st.nextToken());
        }

        m = Integer.parseInt(br.readLine());
        b = new int[m];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < m; i++) {
            b[i] = Integer.parseInt(st.nextToken());
        }
        br.close();

        List<Integer> partialA = allPartialSum(a, n);
        List<Integer> partialB = allPartialSum(b, m);

        partialA.sort(Integer::compareTo);
        partialB.sort(Integer::compareTo);

        long answer = 0;
        int left = 0, right = partialB.size() - 1;
        while (left < partialA.size() && 0 <= right) {
            int sum = partialA.get(left) + partialB.get(right);
            if (sum == T) {
                long cntA = 1, cntB = 1;
                while (left < partialA.size() - 1 && partialA.get(left).equals(partialA.get(left + 1))) {
                    cntA++;
                    left++;
                }
                while (0 < right && partialB.get(right).equals(partialB.get(right - 1))) {
                    cntB++;
                    right--;
                }
                answer += cntA * cntB;
                left++;
                right--;
            } else if(sum < T) {
                left++;
            } else {
                right--;
            }
        }
        System.out.println(answer);
    }

    private static List<Integer> allPartialSum(int[] arr, int size) {
        List<Integer> tmp = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            int sum = 0;
            for (int j = i; j < size; j++) {
                sum += arr[j];
                tmp.add(sum);
            }
        }
        return tmp;
    }
}

Copy link
Collaborator

@wnsmir wnsmir left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์Œ ์•ž์— ๋‘๋ฌธ์ œ ์„ธ๊ทธ๋จผํŠธํŠธ๋ฆฌ๋ฅผ ํ’€๊ณ  ์ด๋ฌธ์ œ๋ฅผ ๋ณด๋‹ˆ
๋ญ”๊ฐ€ ๋˜ ์„ธ๊ทธ๋จผํŠธํŠธ๋ฆฌ๋ฌธ์ œ์ธ๊ฐ€? ํ•˜๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค ใ…‹ใ…‹ใ…‹ใ…‹

๊ฒฐ๊ตญ ๋ชจ๋“ ํ•ฉ์„ ๊ตฌํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— DP์ฒ˜๋Ÿผ ๋ˆ„์ ํ•ฉ์œผ๋กœ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด๋‘๋Š” ๋ฐฉ์‹์„ ํ’€ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๊ฐ•๋ž˜๋‹˜๊ณผ ๊ฐ™์•˜๋Š”๋ฐ
์ €๋Š” T-a๋ฅผ ํˆฌํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹Œ ์นด์šดํ„ฐ๋กœ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

from collections import Counter

c = Counter([1,2,2,3,3,3])
print(c)   # Counter({3: 3, 2: 2, 1: 1})

์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

from collections import Counter

T = int(input())
n = int(input())
A = list(map(int, input().split()))
m = int(input())
B = list(map(int, input().split()))

# ๋ˆ„์ ํ•ฉ ๊ตฌํ•˜๊ธฐ
def prefix_sums(arr):
    prefix = [0]
    for x in arr:
        prefix.append(prefix[-1] + x)
    return prefix

prefixA = prefix_sums(A)
prefixB = prefix_sums(B)

# ๋ถ€ ๋ฐฐ์—ด ํ•ฉ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
def subarray_sums(prefix):
    sums = []
    n = len(prefix)-1
    for i in range(1, n+1):
        for j in range(i, n+1):
            sums.append(prefix[j] - prefix[i-1])
    return sums

subA = subarray_sums(prefixA)
subB = subarray_sums(prefixB)

# subB ๋นˆ๋„ ์„ธ๊ธฐ
countB = Counter(subB)

# ์ •๋‹ต ๊ตฌํ•˜๊ธฐ
answer = 0
for a in subA:
    answer += countB[T - a]

print(answer)

@kangrae-jo kangrae-jo merged commit abdeeb9 into main Aug 21, 2025
1 check passed
@kangrae-jo kangrae-jo deleted the 31-kangrae-jo branch August 21, 2025 10:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants