반응형
애너그램 만들기
두 단어 사이의 애너그램을 만들기 위해 제거해야 하는 문자의 최소 개수를 구하는 문제입니다. 애너그램은 단어의 구성(알파벳과 그 개수)이 완전히 같은 단어를 말합니다.
예제 설명
- 예를 들어, A: "aabbcc"와 B: "xxyybb"의 경우, 답은 8입니다. 왜냐하면 A의 {a, a, c, c}가 B에 없으므로 이 문자들을 제거해야 하고, B의 {x, x, y, y}가 A에 없으므로 이 문자들도 제거해야 합니다.
- 없애야만 하는 문자는 공통 문자를 제외한 모든 문자입니다.
제한
- 시간 제한: 2초
- 메모리 제한: 128MB
- 제출: 14543
- 정답: 8485
- 맞힌 사람: 7116
- 정답 비율: 59.078%
코드 설명
public class Enneagram {
// 주어진 문자열에서 각 알파벳이 몇 번 등장하는지 세는 메소드
public static int[] getAlphabetCount(String str) {
int[] count = new int[26]; // 알파벳 a-z까지의 등장 횟수를 저장할 배열
// 문자열의 각 문자에 대해 반복
for (int i = 0; i < str.length(); i++) {
// 현재 문자의 알파벳 순서에 해당하는 배열의 위치를 1 증가시킴
count[str.charAt(i) - 'a']++;
}
return count; // 완성된 배열을 반환
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 사용자 입력을 받기 위한 Scanner 객체 생성
String a = sc.next(); // 첫 번째 문자열 입력 받음
String b = sc.next(); // 두 번째 문자열 입력 받음
// 문자열 a와 b에서 각 알파벳의 등장 횟수를 계산
int[] countA = getAlphabetCount(a);
int[] countB = getAlphabetCount(b);
int ans = 0; // 제거해야 할 문자의 총 개수를 저장할 변수
// 알파벳 a부터 z까지 순회하면서 두 문자열에서 해당 문자의 개수 차이를 계산
for (int i = 0; i < 26; i++) {
// 두 문자열 간의 해당 알파벳 개수 차이의 절대값을 ans에 더함
ans += Math.abs(countA[i] - countB[i]);
}
System.out.println(ans); // 계산된 제거해야 할 문자의 총 개수 출력
}
}
반응형
'알고리즘 > 문자열' 카테고리의 다른 글
[백준] 소금 폭탄 (0) | 2024.03.19 |
---|---|
[백준] 문서검색 (0) | 2024.03.19 |
[백준] 단어공부 (0) | 2024.03.19 |
[백준] 대소문자 바꾸기 (1) | 2024.03.19 |