백준 31882번 근수 Java

: ) YOUNG·2025년 1월 6일
1

알고리즘

목록 보기
427/441
post-thumbnail

백준 31882번 근수 Java

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

문제



생각하기


  • 문자열 내에서 '2'로만 이루어진 모든 연속 구간(substring)들의 “길이 합”을 구합니다.
    • 연속된 ’2’의 길이”가 𝐿일 때, 그 구간에서 만들 수 있는 모든 substring의 길이 합


동작


(count * (count + 1)) / 2의 공식을 사용해 부분 문자열 길이의 합을 구할 수 있습니다.





결과


코드


Java

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

public class Main {

    // input
    private static BufferedReader br;

    public static void main(String[] args) throws IOException {
        br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        bw.write(solve());
        bw.close();
    } // End of main()

    private static String solve() throws IOException {
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());
        String S = br.readLine();
        int count = 0;
        long sum = 0;

        for (int i = 0; i < N; i++) {
            char ch = S.charAt(i);

            if (ch == '2') {
                count++;
            } else {
                count = 0;
            }

            sum += (long) count * (count + 1) / 2;
        }

        sb.append(sum);
        return sb.toString();
    } // End of solve()
} // End of Main class

0개의 댓글