Dazzling 개발 노트

[백준] 2607 - 비슷한 단어 (Java) 본문

카테고리 없음

[백준] 2607 - 비슷한 단어 (Java)

dj._.dazzling 2024. 3. 27. 09:20

[백준] 2607 - 비슷한 단어 (Java)

문제

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

풀이/후기

비슷한 문자열을 판단하는 기준은 총 3가지이다.

- 기준 문자열과 완전히 동일

- 기준 문자열보다 한 문자를 추가하거나 제거해서 동일

- 기준 문자열보다 한 문자를 변경하여 동일

 

가장 첫번째 입력되는 문자열을 기준으로,

총 26가지 알파벳 중 어떤 문자를 갖는지 체크한다.

 

이후에 입력되는 문자열들을 첫번째 문자열의 구성과 비교하고,

동일한 문자를 갖게 되면 cnt를 올린다.

 

만약 기준 문자열과 비교 문자열의 길이가 같고, cnt가 기준 문자열 길이나 기준 문자열 - 1과 동일하면 result를 올린다.

기준 문자열과 비교 문자열의 길이가 다르다면, 최대 한 문자만 변경 가능하므로 1을 더하거나 뺀 길이와 비교해주고, 

cnt의 값도 비교해준다.

길이가 짧다면 비교 문자열의 길이와 cnt가 동일할 때 유사 단어라고 할 수 있지만,

길이가 길다면 비교 문자열의 길이가 항상 cnt 보다 클 것이므로, 이 때는 비교 문자열의 길이에 1을 빼준다.

 

코드로 보는 것이 더 이해가 잘 될 것이다.

 

--

 

접근 방향을 모르겠어서 힘들었다..

요즘 구현 문제 풀면서 계속 이런 생각이 드는데,

자꾸 못할 것 같다고 생각하지 말고 일단 해보자! 하고 시도해보는게 좋을 것 같다.(근데 잘은 안된다...ㅠㅠ)

코드

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String first = br.readLine();

        int result = 0;

        for (int i=0; i<N-1; i++){
            String next = br.readLine();
            int cnt = 0;
            int[] chars = new int[26];

            for (int j=0; j<first.length(); j++){
                int index = first.charAt(j) - 'A';
                chars[index] += 1;
            }

            for (int j=0; j<next.length(); j++){
                int index = next.charAt(j) - 'A';

                if (chars[index] > 0){
                    cnt++;
                    chars[index]--;
                }
            }

            if (first.length() == next.length() && (cnt == first.length() || cnt == first.length() - 1)){
                result++;
            } 
            // 비교하는 문자열이 더 짧은 경우
            else if (first.length() == next.length() + 1 && cnt == next.length() ){
                result++;
            } 
            // 비교하는 문자열이 더 긴 경우
            else if (first.length() == next.length() - 1 && cnt == next.length() - 1){
                result++;
            }
        }

        System.out.println(result);

    }



}

Commit

https://github.com/allrightDJ0108/CodingTestStudy/commit/dea52d7b2d2e8ba3dca19fd6f708ed99074eade6

참고