문장의 가장 긴 단어 찾기. 자바
github.com/donghyeon0725/algorithm_java/blob/master/src/com/inflearn/one/Three.java
자바 버전 : 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가 조금 독특한데, 코드위 주석을 참고하시면 이해가 쉬우실 겁니다.
그래도 어렵다면 아래 그림을 참고해주세요.
문장을 공백 기준으로 앞에서 부터 잘라, 그 부분만 비교하는 방법입니다.
틀린점이 있다면 지적해주시면 감사하겠습니다.
'알고리즘 > 알고리즘&자료구조 정리' 카테고리의 다른 글
자바 int array, integer list 정렬하기 (내림차순, 오름차순) (0) | 2021.05.04 |
---|---|
등수 구하기. 자바 (0) | 2021.05.03 |
알고리즘. 에라토스테네스의 체. 소수 구하기. 자바 (0) | 2021.04.25 |
피보나치 수열 출력. 알고리즘, 자바 (0) | 2021.04.25 |
필요한 장난감의 최소 개수 구하기 문제 풀이 (너비 우선 탐색 이용, BFS) (0) | 2021.03.28 |
댓글
이 글 공유하기
다른 글
-
자바 int array, integer list 정렬하기 (내림차순, 오름차순)
자바 int array, integer list 정렬하기 (내림차순, 오름차순)
2021.05.04 -
등수 구하기. 자바
등수 구하기. 자바
2021.05.03 -
알고리즘. 에라토스테네스의 체. 소수 구하기. 자바
알고리즘. 에라토스테네스의 체. 소수 구하기. 자바
2021.04.25 -
피보나치 수열 출력. 알고리즘, 자바
피보나치 수열 출력. 알고리즘, 자바
2021.04.25