코딩문제풀이/Baekjoon

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

코딩하는 포메라니안 2023. 3. 14. 13:22

문제

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

 

2607번: 비슷한 단어

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

www.acmicpc.net

 

 

풀이 과정

코드를 작성하기 전에는 각 문자를 인덱스로 써서 문자별 개수를 cnt하고 이를 비교해야겠다까지 설계하고 시작했다. 하지만, 첫 번째 문자열 길이가 더 큰지, 주어지는 문자열 길이가 더 큰지 등 조건까지 같이 떠올리는 연습이 필요한 것 같다.

 

아래는 문자열 길이 차이가 2이상이면 비교 연산없이 다음 문자열로 넘어간다. 2미만이면 같은 문자의 개수가 몇 개인지 count하여 주어진 두 문자열 중 긴 문자열의 길이와의 차이가 1이하면 결괏값에 +1을 한다.  

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

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

        //init
        String input = br.readLine();
        int len = input.length();
        for(int i = 0; i < len; i++){
            first[input.charAt(i)-'A']++;
        }

        //solve
        while(N-- > 1){
            String word = br.readLine();
            int max, min;
            if(word.length() < len){
                max = len;
                min = word.length();
            }
            else{
                max = word.length();
                min = len;
            }

            if(max - min >= 2){
                continue;
            }

            int same = 0;
            int[] next = new int[26];
            for(int i=word.length()-1; i>=0; i--){
                int now = word.charAt(i)-'A';
                if(++next[now] <= first[now]){
                    same++;
                }
            }

            if(Math.abs(same - max) <= 1){
                result++;
            }
        }
        System.out.println(result);

    }
}

 

 

결과