본문 바로가기
코딩테스트/BOJ

[JAVA] 백준 2179번 - 비슷한 단어

by 의정부핵꿀밤 2022. 5. 6.
728x90

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

 

2179번: 비슷한 단어

첫째 줄에 S를, 둘째 줄에 T를 출력한다. 단, 이 두 단어는 서로 달라야 한다. 즉, 가장 비슷한 두 단어를 구할 때 같은 단어는 제외하는 것이다.

www.acmicpc.net


문제 설명이 투박했던 문제..

풀이 과정도 고민 시간도 그리 길지 않았는데

도대체 문자열 선택 기준이 어케 되는지 헷갈렸당

그냥 모든 문자열끼리 다 비교하고 비슷한 알파벳 수가 많은 단어를 앞에서부터 2개 출력하면 되는거였음~

 

자바 코드)

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class boj2179 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        List<String> arr = new ArrayList<>();

        for(int i=0;i<n;i++) {
            String str = scanner.next();
            if(!arr.contains(str)) {
                arr.add(str);
            }
        }

        int a = 0;
        int b = 0;
        int max = 0;

        for(int i=0;i<n-1;i++) {
            String str1 = arr.get(i);
            for(int j=i+1;j<n;j++) {
                String str2 = arr.get(j);
                int count = 0;
                int len = (str1.length()<str2.length()) ? str1.length() : str2.length();
                for(int k=0;k<len;k++) {
                    if(str1.charAt(k)!=str2.charAt(k)) {
                        break;
                    }
                    count++;
                }
                if(max<count) {
                    max = count;
                    a = i;
                    b = j;
                }
            }
        }

        System.out.println(arr.get(a));
        System.out.println(arr.get(b));

    }
}

첨에 비교해서 같은 단어 개수를 2차원 배열에 저장하고 최댓값을 구했는데 메모리 초과더라구

그래서 생각해보니까 굳이 그럴 필요가 없더라구?

그냥 인덱스 값만 저장해서 비교하면 되더라~

뭐 쉬웠는데 내 고민과정 몇개만 말하면 이러하다~

 

1. 같은 단어는 비교하지 않으므로 애초에 문자열 입력 받을 때 같은 문자열은 저장 안하기
2; 이중 for 문으로 앞에서부터 문자열끼리 비교하고 다르면 바로 break!
3. 여러 개면 앞에서부터 순서대로 그냥 출력해버리기

 

별거 없지?

그냥 알바하면서 고민 좀 하고 그걸로 바로 구현했지모야~

끝~ 빠잉!

728x90

댓글