https://www.acmicpc.net/problem/1501
같은 단어려면
1. 0번째와 len-1번째 알파벳이 같음
2. 사용된 알파벳 개수가 같음
판별하려면
1번을 Pos 클래스로 놓음
2번을 알파벳별로 카운팅 하는 대신 정렬해서 key로 씀
Map<String(key), List<Pos>> 사용
이후 M개의 문장을 공백기준으로 파싱하고, 각각 정렬해서 key로 씀
map에 key가 있으면 Pos List 비교해서 정답 누적후 출력
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Main {
static class Pos {
int s, e;
Pos(int s, int e) {
this.s = s;
this.e = e;
}
}
public static void main(String[] args) throws IOException {
Map<String, List<Pos>> m = new HashMap<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
String s = br.readLine();
String ss = sort(s);
if (!m.containsKey(ss)) {
List<Pos> l = new ArrayList<>();
l.add(new Pos(s.charAt(0), s.charAt(s.length() - 1)));
m.put(ss, l);
} else {
m.get(ss).add(new Pos(s.charAt(0), s.charAt(s.length() - 1)));
}
}
StringBuilder sb = new StringBuilder();
int M = Integer.parseInt(br.readLine());
for (int i = 0; i < M; i++) {
int ans = 1;
boolean zero = true;
String[] sa = br.readLine().split(" ");
for (int j = 0; j < sa.length; j++) {
int cur = 0;
String s = sa[j];
String ss = sort(s);
if (m.containsKey(ss)) {
for (Pos p : m.get(ss)) {
if (p.s == s.charAt(0) && p.e == s.charAt(s.length() - 1)) {
cur++;
}
}
}
if(cur != 0) {
zero = false;
ans *= cur;
}
}
sb.append(zero? 0 : ans).append("\n");
}
System.out.println(sb);
}
public static String sort(String s) {
StringBuilder sb = new StringBuilder();
char[] ca = s.toCharArray();
Arrays.sort(ca);
for (char c : ca) {
sb.append(c);
}
return sb.toString();
}
}
'[백준] PS > Java' 카테고리의 다른 글
[백준 1937] 욕심쟁이 판다 - JAVA (0) | 2025.02.25 |
---|---|
[백준 1520] 내리막 길 - JAVA (0) | 2025.02.25 |
[백준 1743] 음식물 피하기 - JAVA (1) | 2025.02.20 |
[백준 1460] 진욱이의 농장 - JAVA (0) | 2025.02.17 |
[백준 1197] 최소 스패닝 트리 - JAVA (1) | 2025.02.16 |