문제
접근 방식
모든 문자열을 알파벳 순서로 매핑한다.
answer = "";
문자열이 다음과 같을 때
str = "zxcz"
map을 생성하고 문자를 하나씩 검사
1) z는 map에 없으므로 key = z, value = a로 저장 및 answer에 추가
2) x는 map에 없으므로 key = x, value = b로 저장 및 answer에 추가
3) c는 map에 없으므로 key = c, value = c로 저장 및 answer에 추가
4) z는 map에 있으므로 바로 answer에 value 추가
그 후 조합으로 모든 문자열을 짝지어 비교하여 같은 문자열일 때 카운트한다
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class Main_1411 {
static int answer;
static int N;
static int[] numbers;
static String[] strs;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
numbers = new int[2];
strs = new String[N];
for(int i=0;i<N;i++) {
strs[i] = mapping(br.readLine());
}
answer = 0;
combi(0,0);
System.out.println(answer);
}
public static void combi(int start, int cnt) {
if(cnt == 2) {
if(strs[numbers[0]].equals(strs[numbers[1]])) {
answer++;
}
return;
}
for(int i=start; i<N;i++) {
numbers[cnt] = i;
combi(i+1,cnt+1);
}
}
public static String mapping(String str) {
String answer = "";
Map<Character,Character> map = new HashMap<>();
char c='a';
for(int i=0;i<str.length();i++) {
if(!map.containsKey(str.charAt(i))) {
map.put(str.charAt(i), (char)(c++));
}
answer+=map.get(str.charAt(i));
}
return answer;
}
}