문제
한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요.
문장속의 각 단어는 공백으로 구분됩니다.
입력
첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다. 문장은 영어 알파벳으로만 구성되어 있습니다.
출력
첫 줄에 가장 긴 단어를 출력한다. 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 합니다.
예시 입력 1
it is time to study
예시 출력 1
study
해결
방법을 2가지로 나눠서 진행하였다.
1.split()
String[] split(String regex)
split 함수는 입력받은 정규표현식 또는 특정문자를 기준으로 문자열을 나누어 배열에 저장하여 리턴한다.
입력받은 문자열을 split 함수를 써서 strArr이라는 문자열배열에 집어넣는다.
그리고 각각의 인덱스를 비교하여 가장 길이가 긴 값을 answer로 리턴해주면 된다.
2. indexOf(),substring()
indexOf()
특정 문자나 문자열에서 해당하는 문자의 인덱스 값을 반환하고 찾지 못했을 경우 '-1'을 반환하는 메소드
String substring(int index)
입력받은 인자값을 index로 해당 위치를 포함하여 이후의 모든 문자열을 리턴 시키는 메소드
String substring(int start, int end)
입력받은 인자값들 중 start 인덱스 부터 end 인덱스까지의 문자를 반환하는 메소드
입력받은 문자열을 indexOf(' ')를 이용하여 공백의 index 값을 pos에 저장한다.
그리고 str.substring(0,pos)를 이용하여 공백 이전의 문자열을 잘라낸다.
그 문자열들의 길이를 비교하여 가장 길이가 긴 문자열을 answer에 담아낸다.
여기서 주의할점은 입력받은 문자열의 마지막에는 공백이 포함되어 있지 않다!
코드에서 보면 알겠지만 while문이 종료될때 한번더 비교연산을 해주어야 한다.
CODE
1. split 이용
import java.util.*;
public class Main {
public static String solution(String str){
String answer ="";
int m = Integer.MIN_VALUE;
String[] strArr = str.split(" ");
for(String x : strArr){
int len = x.length();
if(len>m){
m=len;
answer = x;
}
}
return answer;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
System.out.println(solution(str));
}
}
2.indexOf, substring 이용
import java.util.*;
public class Main {
public static String solution(String str){
String answer ="";
int m = Integer.MIN_VALUE,pos;
while((pos = str.indexOf(' '))!=-1){
String tmp = str.substring(0,pos);
int len = tmp.length();
if(len>m){
m=len;
answer = tmp;
}
str = str.substring(pos+1);
}
if(str.length()>m) answer = str;
return answer;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
System.out.println(solution(str));
}
}
결과
밑에서부터 순서대로 첫번째, 두번째 방법을 사용한것이다.
'문제 풀이 > 인프런' 카테고리의 다른 글
[JAVA11/알고리즘]1-6 중복 문자 제거 (0) | 2022.08.02 |
---|---|
[JAVA11/알고리즘] 1-5 특정 문자 뒤집기 (1) | 2022.07.31 |
[Java11/알고리즘] 1-4 단어 뒤집기 (0) | 2022.07.31 |
[JAVA11/알고리즘] 1-2 대소문자 변환 (0) | 2022.07.29 |
[JAVA11/알고리즘] 1-1 문자 찾기 (0) | 2022.07.28 |