github.com/donghyeon0725/algorithm_java/blob/master/src/com/inflearn/one/Three.java

 

donghyeon0725/algorithm_java

Contribute to donghyeon0725/algorithm_java development by creating an account on GitHub.

github.com

 

자바 버전 : 1.8

 

 

자바 언어로 문장에서 가장 긴 단어를 찾는 풀이 방법은 많습니다.

 

쉬운 방법이 있긴 하지만, 오늘은 독특한 방법을 찾아서 해당 방법을 소개하고자 합니다.

 

보통은 아래와 같은 방법으로 풀 것이라고 생각합니다.

 

1. 문자를 공백을 기준으로 잘라 단어가 들어있는 배열을 만듭니다.

2. 문자의 길이가 가장 긴 것을 뽑아냅니다. 

 

제가 오늘 소개할 방법도 같은 방법인데요.

미리 만들어진 단어 배열을 가지고 가장 긴 단어를 뽑아내는 것이 아닌,

문장 하나를 잘라가면서 찾는 방법입니다.

 

말보단 코드로 보면 이해가 쉬우실 겁니다

 

public static String solution(String str) {
    // 공백을 기준으로 문장을 나눕니다.
    String[] arr = str.split(" ");

    // 배열을 스트림으로 변환 해서, 가장 긴 단어를 찾는다.
    Optional<String> max = Arrays.stream(arr).max((a, b) -> {
        if      (a.length() > b.length())   return 1;
        else if (a.length() == b.length())  return 0;
        else                                return -1;
    });

    return max.get();
}

public static String solution_1(String str) {
    String[] arr = str.split(" ");

    String result = "";

    // 반복문을 돌려서 가장 긴 단어를 찾는다.
    for (String s : arr) {
        if (s.length() > result.length()) {
            result = s;
        }
    }

    return result;
}

public static String solution_2(String word) {
    String result = "";
    // 가장 작은 수를 담아 놓는다. 단어의 끝 번호를 가리킬 index 변수를 만든다.
    int len = Integer.MIN_VALUE, index;

    // 처음 단어의 공백이 발견 되는 위치를 index에 담는다.
    // 문장의 마지막 단어 이전까지 반복된다. -1
    while ( (index = word.indexOf(' ')) != -1) {
        // 이번에 검사할 단어
        String temp = word.substring(0, index);

        // 길이가 더 긴 단어인 경우 결과값 교체
        if (temp.length() > len) {
            len = temp.length();
            result = temp;
        }

        // **** 이전에 검사했던 부분을 짤라낸다. 예를 들어서 "it is time to study" 에서 it 이라는 단어를 검사 했다면 이 후에는 "is time to study" 를 검사할 수 있도록
        word = word.substring(index+1);
    }

    // 끝나고 마지막 단어까지 검사해야 한다.
    if (word.length() > len) {
        result = word;
    }

    return result;
}

// 실행하기
public static void main(String[] args) {
    System.out.println(Three.solution("it is time to study"));
    System.out.println(Three.solution_1("it is time to study"));
    System.out.println(Three.solution_2("it is time to study"));
}

 

결과

study
study
study

 

 

solution 과 solution_1 메소드는 일반적으로 많이 사용하는 풀이 방법을 사용했습니다.

다만, solution 은 stream을 이용해서 가장 긴 단어를 뽑아냈고, solution_1은 반복문을 활용했지요.

solution_2가 조금 독특한데, 코드위 주석을 참고하시면 이해가 쉬우실 겁니다.

그래도 어렵다면 아래 그림을 참고해주세요. 

위와 같은 순서로 문장 검사를 진행합니다.

 

문장을 공백 기준으로 앞에서 부터 잘라, 그 부분만 비교하는 방법입니다.

 

 

 

 

 

 

 

틀린점이 있다면 지적해주시면 감사하겠습니다.