본문 바로가기
코딩/백준-자바

[자바] 백준 2607번: 비슷한 단어

by 철없는민물장어 2023. 3. 5.
728x90
반응형
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;

public class P2607 {

	static String original;
	static HashSet<String> original_set = new HashSet<>();

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		original = br.readLine();
		for (int i = 0; i < original.length(); i++) {
			original_set.add(String.valueOf(original.charAt(i)));
		}
		int result = 0;

		for (int i = 0; i < n - 1; i++) {
			String now = br.readLine();
			if (IsSameStructure(now) == true) {
				result++;
				continue;
			}

			if (now.length() == original.length()) {
				// 글자수 같은경우

				int count = 0;
				for (int j = 0; j < original.length(); j++) {
					// 한글자씩 순회
					if (original.charAt(j) != now.charAt(j)) {
						count++;
					}
					if (count >= 2)
						break;
				}
				if (count == 1)
					result++;

			} else if (now.length() == original.length() + 1) {
				// 한글자 많은경우
				int idx_now = 0;
				int idx_org = 0;
				int count = 0;

				while (idx_now < now.length() && idx_org < original.length()) {
					if (now.charAt(idx_now) != original.charAt(idx_org)) {
						// 글자가 다름
						count++;
						if (idx_now == idx_org) {
							idx_now++;// 오리지널만 한글자 먼저출발
						} else {
							// 두번이상 틀린건 나가
							break;
						}
					} else {
						idx_now++;
						idx_org++;
					}
				}
				if (count <= 1)
					result++;
			} else if (now.length() + 1 == original.length()) {
				// 한글자 적은경우
				int idx_now = 0;
				int idx_org = 0;
				int count = 0;

				while (idx_now < now.length() && idx_org < original.length()) {

					if (now.charAt(idx_now) != original.charAt(idx_org)) {
						// 글자가 다름
						count++;
						if (idx_now == idx_org) {
							idx_org++;// now만 한글자 먼저출발
						} else {
							// 두번이상 틀린건 나가
							break;
						}
					} else {
						idx_now++;
						idx_org++;
					}
				}
				if (count <= 1)
					result++;
			}
		}

		System.out.println(result);
	}

	static boolean IsSameStructure(String str) {
		boolean flag = true;
		if (original.length() == str.length()) {
			for (int i = 0; i < str.length(); i++) {
				if (!original_set.contains(String.valueOf(str.charAt(i)))) {

					flag = false;
					break;
				}
			}
		} else {
			flag = false;
		}

		return flag;
	}
}

문제 조건을 잘못 읽고 계속 풀었다.

비슷한 구성이라는 조건이

1) 각 단어를 구성하는 문자 종류가 서로 같고

2) 각 단어를 구성하는 문자 종류의 각각의 개수도 같다

 

인데

2번을 '문자 길이가 같다'로 잘못 읽고 품.

 

짜증나니까 나중에 다시 풀어봄.

 

728x90
반응형

댓글