본문 바로가기
알고리즘/백준 문제풀이

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

by 잔디🌿 2025. 6. 24.

    원래 문자를 다루는 문제를 정말 안좋아하는데

    그래서 안풀다간 코테에서 문자 나오면 큰일날 것 같아서 풀었다.

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

     

    이 문제는 두 단어가 있을 때 두 단어의 알파벳 구성이 같거나 하나 다른 경우를 찾아내는 문제이다.

     

    핵심 포인트

    char[] main = br.readLine().toCharArray();

     

    일단 toCharArray를 통해서 char형태의 배열로 만들었다.

     

    char[] now = br.readLine().toCharArray();
    List<Character> list = new LinkedList<>();
    for(int j = 0;j<now.length;j++){
      list.add(now[j]);
    }

    그 다음 각 단어를 받아 똑같이 char 배열로 만들고 

    리스트에 각 알파벳을 담았다.

     

    int cnt = 0;
    
    for(int j = 0;j<main.length;j++){
      if(list.contains((Character)main[j])){
        list.remove((Character)main[j]);
      }
      else cnt++;
    }

    그 다음 main배열 속 알파벳과 현재 리스트 내부의 알파벳을 비교한다.

    만약 같은 알파벳을 찾으면 해당 알파벳을 리스트에서 제거한다.

    만약 같은 알파벳이 없으면 cnt를 하나 증가시킨다.

    여기서 주의할 점은 remove 내부와 contains에 그냥 main[i] 만 넣으면 해당 char이 char형태로 인식되는게 아니라 아스키코드 숫자로 인식될수도 있다. 때문에 Character으로 형변환을 해주어야한다.

     

    if(cnt <= 1 && list.size() <= 1){
      ans++;
    }

    만약 cnt 값이 1보다 작거나 같고, 리스트에 남은 알파벳 수가 1보다 작거나 같으면 조건을 만족한다는 뜻이니까

    ans를 하나 증가시킨다.

     

    import java.io.*;
    import java.util.*;
    import java.math.*;
    
    
    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());
    
        char[] main = br.readLine().toCharArray();
        Arrays.sort(main);
    
        int ans = 0;
    
        for(int i = 0;i<n-1;i++){
          char[] now = br.readLine().toCharArray();
          List<Character> list = new LinkedList<>();
          for(int j = 0;j<now.length;j++){
            list.add(now[j]);
          }
    
          int cnt = 0;
    
          for(int j = 0;j<main.length;j++){
            if(list.contains((Character)main[j])){
              list.remove((Character)main[j]);
            }
            else cnt++;
          }
    
          if(cnt <= 1 && list.size() <= 1){
            ans++;
          }
    
        }
    
        System.out.println(ans);
      }
    }
    

     

    전체 코드는 위와 같다.

     

    list 라이브러리 함수명을 잘 외우자!