Problems & Solutions

16139 인간-컴퓨터 상호작용

yeahzzz 2022. 8. 10. 01:05

 

package baekjoon;

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

public class b16139 {

	public static void main(String[] args) throws IOException {
		//Scanner sc = new Scanner(System.in);
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		String str = br.readLine();
		int q = Integer.parseInt(br.readLine());
		while(q-->0) {
			st = new StringTokenizer(br.readLine());
			//char alpha = sc.n
			char alpha = st.nextToken().charAt(0);
			int l = Integer.parseInt(st.nextToken());
			int r = Integer.parseInt(st.nextToken());
			int count=0;
			for(int i = l; i <= r; i++) {
				if (str.charAt(i)==alpha) count++; 
			}
			sb.append(count).append("\n");
		}
		System.out.println(sb);
		
	}

}

 

문제를 읽자마자 어떻게 풀어야할지 바로 가닥이 잡혀서 쓱쓱 써내려 갔다.

컴파일 해보니까 답도 맞게 나와서 어라? 그래도 실버1인데 이렇게 잘 풀린다고? 

 

 

응..~아니야 돌아가.........

역시 코딩의 세계는 호락호락하지 않다..

solved.ac 페이지에서 문제 태그가 누적합이었는데 나는 누적합을 사용하지 않았다.

지금까지 풀었던 문제들은 모두 Integer만 다루었고 문자로는 한번도 해보지 않았을 뿐더러 아스키코드 값을 사용해야 될 것 같긴한데... 도무지 어떻게 해야할지 감도 잡히지 않았다.

결국 다른 분의 코드를 참고했다..ㅠㅠ

 

package baekjoon;

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

public class b16139_2 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		int sum[][] = new int[str.length()][26];
		
		sum[0][str.charAt(0)-'a']++;
		
		for(int i = 1; i < str.length(); i++) {
			int tmp = str.charAt(i)-'a';
			for(int j = 0; j < 26; j++) {
				sum[i][j] = sum[i-1][j];
			}
			sum[i][tmp]++;
		}
		
		int q = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();
		while(q-->0) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			char alpha = st.nextToken().charAt(0);
			int l = Integer.parseInt(st.nextToken());
			int r = Integer.parseInt(st.nextToken());
			
			if(l==0) {
				sb.append(sum[r][alpha-'a']).append('\n');
			} else {
				sb.append(sum[r][alpha-'a'] - sum[l-1][alpha-'a']).append('\n');
			}
		}
		System.out.println(sb);

	}

}