1. ๋ฌธ์ ์ค๋ช ๐
2. ์ ๊ทผ ๋ฐฉ์ ๐๏ธ
KEY WORD
: ๊ตฌ๊ฐ ํฉ
๋์ ํฉ ๋ฐฐ์ด S์์ A~B ๊ตฌ๊ฐ ๋ด์ ๊ตฌ๊ฐํฉ์ ๊ตฌํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํํํ๋๊ฐ?S[B]
- S[A-1]
์ด์๋ค. A๊ฐ ๊ตฌ๊ฐ๋ด์ ํฉํด์ง๋๋ก A-1๊น์ง์ ๊ตฌ๊ฐํฉ์ ์ ๊ฑฐํ๋ค. ์ด๋ฌํ ์๋ฆฌ๋ ๊ตฌ๊ฐ ๋ด์ ์ํ๋ฒณ์ด ๋ช ๋ฒ ๋ฑ์ฅํ๋๊ฐ ์ฐพ๋ ์ด๋ฒ ๋ฌธ์ ์์๋ ์ฌ์ฉํ ์ ์๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด, a๊ฐ A๊ตฌ๊ฐ์์ ํ๋ฒ, B๊ตฌ๊ฐ์์ ํ๋ฒ ๋์จ๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด, S[A] = 1, S[B] = 2๊ฐ ๋ ๊ฒ์ด๋ค. ๊ตฌ๊ฐ์ ํ์ธํ๋ฉด ๋ฌธ์์ด์ด A์ ์์น๋ฅผ ๋์ด์์ B๊น์ง
๊ตฌ๊ฐ์ ์ ํ๋ ์๊ฐ a๋ ํ๊ฐ์ด๋ค. S[B]-S[A]๋ A+1 ~ B๊น์ง์ ๊ตฌ๊ฐํฉ์์ผ๋ก 2-1 = 1์ด ๋์จ๋ค. ๋ฐ๋ฉด S[B] - S[A-1]์ A์ ์์น๋ถํฐ B๊น์ง์ ๊ฑฐ๋ฆฌ
์์ a์ ๊ฐ์์์ผ๋ก S[B] - S[A-1] = 2- 0 = 2๊ฐ ๋์จ๋ค.
์ฐ๋ฆฌ๋ ์์ ๊ฐ์ ๋์ ํฉ์ด a๋ถํฐ z๊น์ง ์ด 26๊ฐ๊ฐ ํ์ํ๋ค. ๋ฐ๋ผ์ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์, ์ด
์ ์ํ๋ฒณ, ํ
์ ๋ฌธ์์ด์ ์์น๋ณ๋ก ๊ฐ ๋ฌธ์๊ฐ ๋์จ ํ์์ ๋์ ์ผ๋ก ์๊ฐํ๋ค.
๋ค์์ ๋ฌธ์ ์์ ๋์จ, seungjaehwang
์ ๋ํ 2์ฐจ์ ๋ฐฐ์ด์ด๋ค.
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
4 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
5 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
6 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
7 | 1 | 0 | 0 | 0 | 2 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
8 | 1 | 0 | 0 | 0 | 2 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
9 | 1 | 0 | 0 | 0 | 2 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
10 | 1 | 0 | 0 | 0 | 2 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
11 | 2 | 0 | 0 | 0 | 2 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
12 | 2 | 0 | 0 | 0 | 2 | 0 | 2 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
ํด๋น ๋ฐฐ์ด์ ์์ฑํ๋ค๋ฉด, ์ดํ๋ถํฐ๋ ๋ฌธ์ ์์ ์ํ๋ ์ํ๋ฒณ๊ณผ ๊ตฌ๊ฐ์ ๋ง๊ฒ ๋์ ํฉ์์ ๊ตฌ๊ฐํฉ์ ๊ตฌํ๋ฉด ๋๋ฏ๋ก, ์ดํ ๊ณผ์ ์ ๋ํ ํ์ด ์ค๋ช ์ ์๋ตํ๊ณ ๋ฐ๋ก ์ฝ๋ ์๊ฐ๋ก ๋์ด๊ฐ๊ฒ ๋ค.
3. ์ฝ๋ ์๊ฐ ๐
import java.io.*;
import java.util.StringTokenizer;
public class Main {
/*
* b16391 ์ธ๊ฐ-์ปดํจํฐ ์ํธ์์ฉ
* 1. ์ํ๋ฒณ์ ํ, ํด๋น ์ํ๋ฒณ์ด ๋์จ ํ์ ๋์ ์ ์ด๋ก ํํ
* 2. ์ํ๋ฒณ a๊ฐ ๋์จ ํ์์ ๋์ ํฉ ๋ฐฐ์ด์ Sa๋ผ๊ณ ํ ๋,
* 3. Sa[B] - Sa[A-1]์ A ~ B๊น์ง์ a๊ฐ ๋์จ ํ์๊ฐ ๋จ.
*
* ex) ๋ง์ฝ 2-1์ด๋ผ๋ฉด, a๋ ๊ตฌ๊ฐ ์ ์ ํ๋ฒ ๋ฑ์ฅํ๋ค๋ ๋ป์.
* A-1๋ฒ๊น์ง์ ๋์ ํฉ = 1 ์ด๋ ์๋ฆฌ์์ผ๋ก
* */
public static void main(String[] args) throws IOException {
int [][] sum;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
sum = new int [26][s.length()+1];
for (int i = 0; i < s.length(); i++) {
int w = (int)s.charAt(i) - 97;
for (int j = 0; j < 26; j++) {
if(j == w) sum[j][i+1] = sum[j][i] + 1;
else sum[j][i+1] = sum[j][i];
}
}
int tc = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < tc; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int w = (int)st.nextToken().charAt(0) - 97;
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
sb.append(sum[w][end+1] - sum[w][start]).append("\n");
}
System.out.println(sb);
}
}
4. ๋ฐฐ์ด ๊ฒ๋ค ๐ฏ
์์ ํ์
์ ์ด๋ค๋ฉด, ๋ฌธ์์ด ์ต๋ ๊ธธ์ด \(10^5\) ๋ต์ ๋ฐ๋ผ๋ ๊ตฌ๊ฐ์ ๊ฐ์ \(10^5\) ์ด๋ผ์ ์ต์
์ ๊ฒฝ์ฐ ์ต๋ \(10^{10}\)์ ์ฐ์ฐ์ด ํ์ํด์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค.