๊ธฐ๋ก๋ฐฉ

BOJ_10986 : ๋‚˜๋จธ์ง€ ํ•ฉ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_10986 : ๋‚˜๋จธ์ง€ ํ•ฉ

Soom_1n 2022. 9. 23. 18:01

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

10986๋ฒˆ: ๋‚˜๋จธ์ง€ ํ•ฉ

์ˆ˜ N๊ฐœ A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ์—ฐ์†๋œ ๋ถ€๋ถ„ ๊ตฌ๊ฐ„์˜ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ตฌ๊ฐ„์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ฆ‰, Ai + ... + Aj (i ≤ j) ์˜ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” (i, j)

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • n๊ฐœ์˜ ์ž…๋ ฅ๋˜๋Š” ์ˆซ์ž์˜ ๋ถ€๋ถ„ ๊ตฌ๊ฐ„ ํ•ฉ์ด m์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • n์€ 100๋งŒ, m์€ 100์ด๋‹ค. ๊ตฌ๊ฐ„ ํ•ฉ์„ ๋งค๋ฒˆ ๊ณ„์‚ฐํ•˜๋ฉด ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฏ€๋กœ ๊ตฌ๊ฐ„ ํ•ฉ ๋ฐฐ์—ด์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ๊ตฌ๊ฐ„ ํ•ฉ ๋ฐฐ์—ด ๊ณต์‹ : S[i] = S[i-1] + A[i]
    • ๋ฐฐ์—ด์—์„œ ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ ( i ~ j ) : S[j] - S[i-1]
    • ๋‚˜๋จธ์ง€๋„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด ๋‘๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ์•„์ด๋””์–ด
      • (A + B) % C == ((A % C) + (B % C)) % C ์ด๋‹ค.
      • S[i] % M == S[j] % M ์ด๋ผ๊ณ  ํ•˜๋ฉด, [S[i] - S[j]) % M ์€ 0์ด๋‹ค.
      • ์ฆ‰, ๊ตฌ๊ฐ„ ํ•ฉ ๋ฐฐ์—ด S์˜ ๊ฐ’์„ M์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด, ๊ฐ’์ด ๊ฐ™์€ ์ธ๋ฑ์Šค ์Œ์€ M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        long sum[] = new long[n+1];
        long c[] = new long[m];
        long answer = 0;

        st = new StringTokenizer(br.readLine());
        for (int i = 1; i <= n; i++){ // ๊ตฌ๊ฐ„ ํ•ฉ
            sum[i] = sum[i-1] + Integer.parseInt(st.nextToken());
        }

        for (int i = 1; i <= n; i++){ // m์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ
            int remainder = (int) (sum[i] % m);
            if (remainder == 0) answer++;
            c[remainder]++;
        }
        for (int i = 0; i < m; i++){ // ๊ฐ™์€ ๋‚˜๋จธ์ง€์—์„œ 2๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜
            if (c[i] > 1){
                answer += c[i] * (c[i]-1) / 2;
            }
        }
        System.out.println(answer);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๊ตฌ๊ฐ„ ํ•ฉ ๋ฐฐ์—ด sum์˜ ์ธ๋ฑ์Šค 1~n ๊นŒ์ง€ ๊ตฌ๊ฐ„ ํ•ฉ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  • ๋ฐฐ์—ด sum์„ ์ˆœํšŒํ•˜๋ฉฐ m์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ๋ฐฐ์—ด c์— ๋‚˜๋จธ์ง€๋ฅผ ์ธ๋ฑ์Šค๋กœ ํ•ด์„œ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. (๋ฐฐ์—ด sum์—์„œ ๊ฐ™์€ ๋‚˜๋จธ์ง€๋ฅผ ๊ฐ™๋Š” ์ธ๋ฑ์Šค ์ˆ˜)
    • ๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋ฉด 0~ํ•ด๋‹น ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ๊ตฌ๊ฐ„ ํ•ฉ์ด m์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ answer์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
      (์ธ๋ฑ์Šค 0~i์˜ ๊ตฌ๊ฐ„ ํ•ฉ์€ ๊ณต์‹์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋”ฐ๋กœ ๊ณ„์‚ฐํ•ด์ค˜์•ผ ํ•œ๋‹ค)
  • ๊ฐ™์€ ๋‚˜๋จธ์ง€์˜ ์ธ๋ฑ์Šค๋“ค์—์„œ ์Œ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ answer์— ๋”ํ•œ๋‹ค.
    • C[i] ๊ฐœ์—์„œ 2๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒจ์šฐ์˜ ์ˆ˜ : C[i] * (C[i] - 1) / 2

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๊ณจ๋“œ 3๋ฌธ์ œ๋Š” ์ฒ˜์Œ ํ’€์–ด๋ดค๋Š”๋ฐ ์ƒ๋‹นํžˆ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค. ๊ต์žฌ๋ฅผ ๋ณด๋ฉฐ ํ’€์ด๋ฅผ ๋ณด๋ฉด์„œ๋„ ์ดํ•ดํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.
  • ๊ตฌ๊ฐ„ ํ•ฉ ๋งŒ์œผ๋กœ๋„ ์ด๋ ‡๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š”๊ฒŒ ์‹ ๊ธฐํ•˜๋‹ค.
  • ๊ตฌ๊ฐ„ ํ•ฉ์œผ๋กœ ๊ณจ๋“œ 3๊นŒ์ง€ ํ’€์–ด๋ดค์œผ๋‹ˆ ์–ด๋Š์ •๋„ ์ž์‹ ๊ฐ์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
  • ๊ธฐ์กด์˜ ๋‚ด ํ’€์ด์—์„œ๋Š” ๊ตฌ๊ฐ„ ํ•ฉ ๋ฐฐ์—ด์„ ๊ตฌํ•˜๊ณ , ๊ตฌ๊ฐ„ํ•ฉ์—์„œ m์˜ ๋‚˜๋จธ์ง€๋ฅผ ๋งค๋ฒˆ ๊ณ„์‚ฐํ•˜๋Š” ์‹์œผ๋กœ ํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
    • ๊ทธ ๋‹ค์Œ์€ ๋ฏธ๋ฆฌ ๋‚˜๋จธ์ง€๋กœ ๊ณ„์‚ฐํ•˜๊ณ , ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ฐพ๋Š”๋ฐ ๋˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.
    • ๊ฐ™์€ ๋‚˜๋จธ์ง€๋“ค์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ , 2๊ฐœ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ–ˆ๋‹ค.
  • ๊ทธ๋ƒฅ ํ’€์ด ์ž์ฒด๋„ ๊ตฌ๊ฐ„ ํ•ฉ์— ๋ฏธ๋ฆฌ ๋‚˜๋จธ์ง€๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค๋Š”๊ฒŒ ์‹ ๊ธฐํ–ˆ๋Š”๋ฐ, ๋‚˜๋จธ์ง€๋ฅผ ๋ฏธ๋ฆฌ ์„ธ๊ณ  ์Œ์„ ๋งŒ๋“œ๋Š” ์กฐํ•ฉ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฑด ์ƒ๊ฐ๋„ ๋ชปํ–ˆ๋‹ค. ์˜ˆ์ „์— ๋ฐฐ์šด ์ˆ˜ํ•™ ๊ณต์‹์ธ๋ฐ ์ฐธ ๋‚ฏ์„ค๋‹ค...

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_1940 : ์ฃผ๋ชฝ  (0) 2022.09.24
BOJ_2018 : ์ˆ˜๋“ค์˜ ํ•ฉ 5  (0) 2022.09.24
BOJ_1384 : ๋ฉ”์‹œ์ง€  (0) 2022.09.23
BOJ_11669 : ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5  (0) 2022.09.22
BOJ_1380 : ๊ท€๊ฑธ์ด  (0) 2022.09.22