public class Solution {
public int solution(String before, String after) {
// 두 문자열의 길이가 다르면 0 반환
if (before.length() != after.length()) {
return 0;
}
// 각 문자의 빈도수를 저장할 배열
int[] beforeCount = new int[26];
int[] afterCount = new int[26];
// before 문자열의 각 문자의 빈도수 증가
for (int i = 0; i < before.length(); i++) {
beforeCount[before.charAt(i) - 'a']++;
}
// after 문자열의 각 문자의 빈도수 증가
for (int i = 0; i < after.length(); i++) {
afterCount[after.charAt(i) - 'a']++;
}
// 두 문자열의 빈도수를 비교
for (int i = 0; i < 26; i++) {
if (beforeCount[i] != afterCount[i]) {
return 0;
}
}
return 1;
}
}
이 경우, 위 오답을 해결해 줄 수 있었습니다.
before.charAt(i) - 'a' 를 해주면, a - a = 97 - 97 = 0으로 0번째 인덱스를 확인하게되고,
총 26개의 인덱스를 모두 확인해주는 순환을 할 수 있게 됩니다.
위 설명한 정렬을 이용한 방식과 비교해보았을 때 제 결론은 아래와 같았습니다.
1. 코드의 간결성
정렬을 이용한 방식이 코드가 더 짧고 가독성이 좋았습니다.
2. 효율성
정렬을 이용할 경우, 두개의 문자열을 각각 정렬(두번)해야하는 시간이 소요되고,
카운팅을 이용할 경우, 두개의 문자열을 '한번' 비교하게되니 더 짧은 시간이 소요되게 됩니다.