본문 바로가기

문제 풀이/인프런

[Java11/알고리즘] 1-3 문장 속 단어

문제

한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요.

문장속의 각 단어는 공백으로 구분됩니다.



 


입력

첫 줄에 길이가 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));
    }
}

 


결과

 

 

밑에서부터 순서대로 첫번째, 두번째 방법을 사용한것이다.