

1. 문제 풀이 아이디어
Map
을 활용하여 번호판 데이터를 저장하고 이를 통해 문제를 해결할 수 있다.
2. 나의 정답 코드
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringBuilder stringBuilder = new StringBuilder();
int t = Integer.parseInt(bufferedReader.readLine());
for (int i = 0; i < t; i++) {
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int n = Integer.parseInt(stringTokenizer.nextToken());
int k = Integer.parseInt(stringTokenizer.nextToken());
String[] x = bufferedReader.readLine().split(" ");
Map<String, Integer> map = new HashMap<>();
for (int j = 0; j < n; j++) {
int count = 0;
char[] cs = x[j].toCharArray();
for (int l = 0; l < k; l++) {
if (cs[l] < 'a') {
count++;
cs[l] += 32;
}
}
Arrays.sort(cs);
String s = String.valueOf(cs) + count;
map.put(s, map.getOrDefault(s, 0) + 1);
}
int result = 0;
for (int j : map.values()) {
if (j == 1) continue;
result += j * (j - 1) / 2;
}
stringBuilder.append(result).append('\n');
}
System.out.print(stringBuilder);
bufferedReader.close();
}
}
3. 정리
- 입력받은 문자열을
char
배열로 변환한 후, 각 문자를 순회하며 대문자를 소문자로 변환하고 변환된 대문자의 개수를count
로 센다.
- 변환된
char
배열을 정렬한 후, 배열과 대문자 개수를 결합하여 문자열로 만든다.
- 생성된 문자열을
Map
에 저장하여 비슷한 번호판을 그룹화한다.
Map
의 값을 순회하며 값이1
이 아닌 경우 쌍의 수를 계산하고 결과값에 더해 최종적으로 문제를 해결한다.
Share article