키워드
두 단어가 같은 구성을 갖는 경우, 또는 한 단어에서 **한 문자를 더하거나, 빼거나, 하나의 문자를 다른 문자로 바꾸어 나머지 한 단어와 같은 구성을 갖게 되는 경우**에 이들 두 단어를 서로 비슷한 단어라고 한다.
구현
가장 처음 입력 받는 단어를 26개 배열에 각 알파벳의 갯수를 대입한다.
다음으로 입력 받는 데이터는 각 알파벳 배열에서 빼는 연산을 하고, 각 절댓값을 더한다.
만약 결과에서 음수라면 추가적으로 데이터를 가진 것이다.
만약 결과에서 양수라면 알파벳이 그 만큼 부족한 것이다.
- 글자 수가 같은 경우
- 글자의 배열만 다른 경우 → 합이 0이다.
- 한 글자만 바꾸는 경우 → 합이 2이다.
- 글자 수가 1 차이나는 경우
- 하나를 추가하는 경우 → 합이 1이다.
- 하나를 제거하는 경우 → 합이 1이다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class java_2607 {
// 입력되는 단어의 갯수
static int N;
// 첫 번째 단어의 26자리 알파벳 각 갯수 저장
static int[] alphaList;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 26자리 배열 생성
// 각 알파벳마다 가진 갯수 저장
// 입력값 마다 26자리 배열 생성 -> 인덱스의 값을 확인 -> 같거나, 차이가 1만 나는 경우 비슷한 단어 카운트
N = Integer.parseInt(br.readLine());
int result = 0;
alphaList = new int[26];
// 첫 번째 단어 배열에 추가
String firstWord = br.readLine();
for (int i = 0; i < firstWord.length(); i++) {
alphaList[firstWord.charAt(i) - 'A'] += 1;
}
// 나머지 단어 처리
for (int i = 1; i < N; i++) {
int targetAlphaList[] = Arrays.copyOf(alphaList, 26);
String targetWord = br.readLine();
// 입력 알파벳 카운트 갱신
for (int j = 0; j < targetWord.length(); j++) {
targetAlphaList[targetWord.charAt(j) - 'A'] -= 1;
}
// 배열 내용의 합
int tmpResult = 0;
for (int j = 0; j < targetAlphaList.length; j++) {
tmpResult += Math.abs(targetAlphaList[j]);
}
// 한 글자만 바꾸는 경우 -> 0
// 글자의 배열만 다른 경우 -> 0
if (firstWord.length() == targetWord.length()) {
if (tmpResult == 0 || tmpResult == 2) {
result += 1;
}
}
// 추가해야 같아지는 경우
// 삭제해야 같아지는 경우
// -> 글자수가 1개 차이가 난다.
else if (Math.abs(firstWord.length() - targetWord.length()) == 1) {
if (tmpResult == 1) {
result += 1;
}
}
}
System.out.println(result);
}
}
'Coding Test > BOJ' 카테고리의 다른 글
[BOJ/JAVA] 1541번: 잃어버린 괄호 (0) | 2022.10.24 |
---|---|
[BOJ/JAVA] 5582번: 공통 부분 문자열 (0) | 2022.10.24 |
[BOJ/JAVA] 10800번: 컬러볼 (0) | 2022.10.19 |
[BOJ/JAVA] 3020번: 개똥벌레 (0) | 2022.10.19 |
[BOJ/JAVA] 21318번: 피아노 체조 (0) | 2022.10.19 |