[백준] 16139 : 인간-컴퓨터 상호작용 (JAVA)

2024. 12. 2. 11:12·Algorithm

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

📌 50점,,

16139번 문제는 다음과 같은 조건에 따라 점수가 부여되는 문제였습니다. 

서브태스크 1 (50점)
문제열의 길이는 2000자 이하, 질문의 수는 2000개 이하이다.

서브태스크 2 (50점)
추가 제한 조건이 없다.

 

문제를 보고 간단히 구현해 풀었으나, 50점만 받았습니다..🥲

 

50점 받은 코드입니다.

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

public class Main {

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

        char[] chArr = br.readLine().toCharArray();

        int q = Integer.parseInt(br.readLine());

        for (int i = 0; i < q; i++) {
            st = new StringTokenizer(br.readLine());
            int answer = 0;
            char ch = st.nextToken().charAt(0);
            int s = Integer.parseInt(st.nextToken());
            int e = Integer.parseInt(st.nextToken());

            for (int j = s; j <= e; j++) {
                if (ch == chArr[j]) {
                    answer++;
                }
            }

            sb.append(answer + "\n");
        }

        bw.write(sb.toString() + "");
        bw.close();
    }
}

 

🚩 누적 합

50점 코드를 작성하고 나서 다른 분들의 풀이를 확인해 보니 2차원배열을 사용해 모든 알파벳을 기준으로 누적합을 계산하는 방식으로 푼 것을 확인할 수 있었습니다!

 

 

누적합 구현을 구체적으로 설명하자면, 주어진 문자열과 알파벳 데이터를 기반으로 2차원 배열을 생성하고, 문자열을 순회하며 각 알파벳이 포함되었는지를 확인해 누적합 방식으로 값을 저장합니다.

 

 

누적합 계산이 완료되면, 주어진 범위 내에 찾고자 하는 문자가 몇 개 포함되어 있는지를 end - (start-1) 연산을 통해 쉽게 구할 수 있습니다.

 

100점 받은 코드입니다.

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

public class Main {

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

        char[] arr = br.readLine().toCharArray();     // 주어진 문자열을 char 배열로 바로 변환

        int[][] check = new int[arr.length][26];
        for (int i = 0; i < arr.length; i++) {
            int num = arr[i] - 'a';

            for (int j = 0; j < 26; j++) {      // 누적합
                if (i != 0) check[i][j] += check[i - 1][j];
                if (j == num) check[i][j] += 1;
            }
        }

        int q = Integer.parseInt(br.readLine());

        for (int i = 0; i < q; i++) {
            st = new StringTokenizer(br.readLine());
            int num = st.nextToken().charAt(0) - 'a';
            int s = Integer.parseInt(st.nextToken());
            int e = Integer.parseInt(st.nextToken());

            if (s == 0) {
                bw.write(check[e][num] + "\n");
            } else {
                bw.write(check[e][num] - check[s - 1][num] + "\n");
            }
        }

        bw.close();
    }
}

'Algorithm' 카테고리의 다른 글

[백준] 10816 : 숫자 카드 2 (JAVA)  (0) 2024.11.18
[백준] 1916 : 최소비용 구하기 (JAVA)  (2) 2024.11.13
[백준] 16953 : A -> B (JAVA)  (1) 2024.11.10
[백준] 11054 : 가장 긴 바이토닉 부분 수열 (JAVA)  (1) 2024.11.08
[백준] 13549 : 숨바꼭질 3 (JAVA)  (0) 2024.11.05
'Algorithm' 카테고리의 다른 글
  • [백준] 10816 : 숫자 카드 2 (JAVA)
  • [백준] 1916 : 최소비용 구하기 (JAVA)
  • [백준] 16953 : A -> B (JAVA)
  • [백준] 11054 : 가장 긴 바이토닉 부분 수열 (JAVA)
chanyoungdev
chanyoungdev
chanyoungdev
  • chanyoungdev
    Young Code
    chanyoungdev
  • 전체
    오늘
    어제
    • 분류 전체보기 (28)
      • Programming (12)
        • Java (0)
        • Spring (10)
        • etc (2)
      • Data Infra (5)
        • Database (1)
        • Redis (2)
        • etc (2)
      • DevOps (4)
        • CI CD (1)
        • Nginx (2)
        • Docker (0)
        • Aws (0)
        • etc (1)
      • Algorithm (6)
      • etc (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • First Tech Blog
    • Github
  • 공지사항

  • 인기 글

  • 태그

    junit
    JWT
    ssl
    Infra
    Redis
    spring security
    Mockito
    Virtual Thread
    캐시
    단위 테스트
    공통 응답
    Spring Batch
    elasticsearch
    lock
    domain
    nginx
    cache
    infra architecture
    OAuth
    Algorithm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
chanyoungdev
[백준] 16139 : 인간-컴퓨터 상호작용 (JAVA)
상단으로

티스토리툴바