알고리즘

[boj2607/Java] 비슷한 단어

IT 참다랑어 2023. 7. 17. 12:50

https://www.acmicpc.net/problem/2607

 

2607번: 비슷한 단어

첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이

www.acmicpc.net

위의 문제에서 비슷한 단어를 판단하는 가장 중요한 요소는 포함하고 있는 알파벳의 종류와 개수에 있다고 생각했다. 그래서 기준 단어에 대한 A~Z까지 알파벳의 개수를 관리하기 위한 배열을 선언하고 각각의 단어도 확인을 위한 배열을 선언한다. 그리고 String 클래스의 toCharArray 함수를 이용해서 char 배열로 String을 바꾼 뒤, 알파벳 개수를 확인.

 

처리 과정에서 차이를 계산하고, 길이가 같다면 차이가 2 이하(2일 때는 교체, 1일때는 추가), 길이가 다르다면 차이가 2미만일때 비슷한 단어라고 판단할 수 있다.

 

import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());
		String fString = br.readLine();
		char[] farr = fString.toCharArray();
		int[] abc = new int[27];
		for(char i:farr) {
			abc[i-'A']++;
		}
		int cnt = 0;
		
		for(int tc = 1; tc<T; tc++) {
			String s = br.readLine();
			char[] sarr = s.toCharArray();
			int[] s1 = new int[27];
			for(char i: sarr) {
				s1[i-'A']++;
			}
			//compare abc, s1;
			int diff = 0;
			for(int i = 0; i<26; i++) {
				diff += Math.abs(s1[i]-abc[i]);
			}
			if(s.length()==fString.length()) {
				if(diff<=2) {
					cnt++;
				}
			}
			else {
				if(diff < 2) {
					cnt++;
				}
			}
			
		}
		System.out.println(cnt);
		br.close();
	}

}

'알고리즘' 카테고리의 다른 글

[boj2477/Java] 참외밭  (0) 2023.07.20
[boj3474/JAVA] 교수가 된 현우  (0) 2023.07.20
[boj6884/Java] 소수 부분 수열  (0) 2023.07.17
[boj11140/Java] LOL  (0) 2023.07.17
[boj2075/c++] N번째 큰 수  (0) 2023.05.05