Coding Planet

3. 문장 속 단어 찾기 - split(), indexOf(), subString() 본문

🎁 코딩테스트/알고리즘

3. 문장 속 단어 찾기 - split(), indexOf(), subString()

jhj.sharon 2023. 5. 3. 21:23
반응형

1. 문제 요구사항

  • 한개의 영어 문장이 주어지면 그 문장 중 가장 긴 단어를 출력한다. 문장 속 각 단어는 공백으로 구분된다.
  • 문자열의 길이는 100을 넘지 않는다. 가장 길이가 긴 단어가 여러개 일 경우 문장에서 가장 앞쪽인 단어를 출력한다.

 

 

2. 문제풀이에 사용된 메서드: 문자열-> 단어 배열

  • 입력받은 문자열 str을 공백으로 구분하여 단어 배열로 저장하기 -> String [] s = str.split(" "); 
  • 반복문으로 문자열 배열 s를 돌면서 해당 단어의 길이를 구한다 -> int len=x.length();
  • 배열을 돌면서 최대값을 뽑는 알고리즘을 활용한다(최대값 덮어쓰기) -> if(len>max)  max=len; 
  • 최대값을 answer에 담는다

 

 

2. 문제풀이(2) : 문자열로만 찾기 

  • indexOf로 문자열을 돌면서 빈칸을 찾는다. indexOf는 찾는 문자열이 있으면 -1을 반환하므로 더이상 공백이 없을 때가지 문자열을 쭉~ 찾아보게 된다.
  • 더이상의 공백이 없어 -1이 반환되면 while문은 자연스럽게 멈춘다.
  • subString(0, pos) -> subString은 문자열을 잘라주는 메서드이다. 두번째 파라미터의 -1 인덱스까지 잘라낸다.
  • subString(pos+1) -> pos+1 부터 문자열 끝까지 잘라내기. 이를 통해 반복문내 String tmp = str.substring(0, pos)가 다시 정상 적으로 작동한다.
  • 단! (pos=str.indexOf(" ")) !=-1 조건에 의해 마지막 단어는 뒤에 공백이 없으므로 단어 길이에 상관 없이 false가 되어 while문이 종료된다.
  • 따라서 return전에 마지막으로 직접 비교해준다.  -> if(str.length()>max) answer=str;

 

 

 

3. 풀이

import java.util.Scanner;

public class Main {
	
	public String solution(String str) {
		String answer ="";
		
		int max = Integer.MIN_VALUE;// 정수 최소값
		String [] s = str.split(" "); // 공백으로 구분하여 잘라서 문자열 배열에 저장
		for(String x : s) {
			int len=x.length();
			if(len>max) {
				max=len;
				answer=x;
			}
			
		}
		
		return answer;
	}

	public static void main(String[] args) {

		Main T = new Main();
		
		Scanner kb = new Scanner(System.in);
		String str = kb.nextLine();
		System.out.println(T.solution(str));

	}

}

 

반응형
Comments