728x90
3. 문장 속 단어
[설명]
한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요.
문장속의 각 단어는 공백으로 구분됩니다.
[입력]
첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다. 문장은 영어 알파벳으로만 구성되어 있습니다.
[출력]
첫 줄에 가장 긴 단어를 출력한다. 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한
단어를 답으로 합니다.
문자열이 특정 구분자로 연결되어 있을 경우, 구분자를 기준으로 문자열을 분리하기 위해서는
String의 Split() 메소드를 이용하거나,
java.Util 패키지의 StringTokenizer 클래스를 이용할 수 있다.
>>>>> 방법 1. Split() 이용
배열로 리턴해 바로 비교
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String answer = "";
for(String s : str.split(" ")){
if(s.length() > answer.length()){
answer = s;
}
}
System.out.println(answer);
}
>>>>> 방법 2. StringTokenizer 이용
문자열로 리턴 -> 배열로 파싱하여 비교
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringTokenizer st = new StringTokenizer(str); // 구분자 입력하지 않을 경우 공백
// 문자열 ->> 배열로 파싱
// (1) hasMoreTokens()로 총 토큰의 개수를 구하고
int tokens = st.countTokens();
// (2) token들 담을 배열을 만들고
String[] strArr = new String[tokens];
// (3) nextToken()으로 한 토큰씩 꺼내서 배열에 저장
int idx = 0;
while(st.hasMoreTokens()){
strArr[idx++] = st.nextToken(); // 인덱스 하나 하나에 저장
}
// System.out.println(Arrays.toString(strArr));
// (4) 배열 비교
String answer = "";
for(String s : strArr){
if(s.length() > answer.length())
answer = s;
}
System.out.println(answer);
}
그러나, 문자열의 길이가 길어지거나, 구분자가 공백이 아닌 다른 문자가 되면 StringTokenizer의 성능이 Split 보다 낮아지는 것을 알 수 있다. 그냥 편하게 애초에 배열로 리턴하여 비교하는 것이 빠를 듯..
>>> 방법 3. IndexOf() 이용
public static void main(String[] args) throws IOException {
// IndexOf 이용 - 문자열 내에서 특정한 문자열의 index 값을 리턴한다.
// 특징1. index는 0부터 시작
// 특징2. 찾는 문자열이 없을 경우 -1 을 리턴
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String answer="";
int max = Integer.MIN_VALUE, pos;
while((pos = str.indexOf(" ")) != -1){ // 띄어쓰기를 발견 못하면 -1 리턴하니까..
// 발견하면 index 번호 리턴
String tmp = str.substring(0, pos);
int length = tmp.length();
if(length > max){ // 길이가 같다면 앞 단어로..
max = length;
answer = tmp;
}
str = str.substring(pos+1);
}
if(str.length() > max) answer=str; // 마지막 단어 처리!
System.out.println(answer);
}
728x90
'알고리즘 문제풀이 > Beakjoon' 카테고리의 다른 글
[코테/알고리즘] 백준 단계별 학습 방법 (+초보자 추천) (0) | 2022.10.25 |
---|---|
[자바 알고리즘] String - 단어 뒤집기 : 주어진 N개의 단어를 뒤집어 출력하기 (0) | 2022.01.24 |
[자바 알고리즘] String - 대소문자 변환 : 대문자는 소문자로 소문자는 대문자로 변환하여 출력 (0) | 2022.01.22 |
[자바 알고리즘] String - 문자열 속에서 문자 찾기 : 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아보기 (0) | 2022.01.22 |
코딩 문제 사이트 백준 사용법, 주의사항 (알고리즘, 코딩 테스트 연습) (0) | 2021.06.30 |