문제
https://www.acmicpc.net/problem/1919
1919번: 애너그램 만들기
두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs
www.acmicpc.net
문제 풀이
1. 입력받은 두 문자열의 알파벳 개수를 저장할 두 개의 int형 배열(알파벳 수만큼의 크기)을 선언한다.
2. 입력받은 두 문자열을 전부 문자 배열로 바꾼다.
3. 전부 소문자이기에 대/소문자를 구별할 필요는 없으며, int형 배열 인덱스를 '문자 배열의 아스키 코드 값'을 이용해 접근한다.
4. 두 개의 int형 배열을 돌면서 값을 비교해 개수가 같은 것 외에는 모두 차이를 카운팅 해야 한다 -> 인덱스마다 두 배열 값의 차이(절댓값)를 Math.abs 함수를 이용해 구한 후 카운팅 하면 된다.
코드
import java.util.Scanner;
public class BOJ1919 {
public static void main(String[] args) {
int[] arr1 = new int[26]; // 초기값 0
int[] arr2 = new int[26];
Scanner sc = new Scanner(System.in);
char[] str1 = sc.nextLine().toCharArray();
char[] str2 = sc.nextLine().toCharArray();
int count = 0;
for (int i=0; i<str1.length; i++) {
arr1[str1[i] - 'a']++; // 문자를 정수로 인식하게 하면, 그게 알파벳 배열의 인덱스
}
for (int i=0; i<str2.length; i++) {
arr2[str2[i] - 'a']++;
}
for (int i=0; i<26; i++) {
count += Math.abs(arr1[i] - arr2[i]); // 절댓값 구하는 함수
}
System.out.println(count);
}
}
'Algorithm > BaekJoon' 카테고리의 다른 글
[백준] 9020: 골드바흐의 추측 (0) | 2023.02.14 |
---|---|
[백준] 1193: 분수찾기 (0) | 2023.02.10 |
[백준] 2292: 벌집 (0) | 2023.02.10 |
[백준] 2941: 크로아티아 알파벳 (0) | 2023.02.08 |
[백준] 1157: 단어 공부 (0) | 2023.02.08 |