ezhoon

[인프런] 01-03 문장 속에서 가장 긴 단어를 출력하기 본문

[Java] 인프런 문제풀이/Stirng(문자열)

[인프런] 01-03 문장 속에서 가장 긴 단어를 출력하기

ezhoon 2022. 1. 15. 21:32

문제


  • 한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하기
  • 문장속의 각 단어는 공백으로 구분

 

⚠️ 주의사항


  • 공백으로 구분 할 것
  • 가장 긴 단어를 출력하지만 같은 길이의 단어가 여러개일 경우 가장 앞쪽에 위치한 단어를 답으로 한다

 

문제풀이


1. BufferedReader + StringTokenizer + StringBuilder 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public String solution(String str) {
        int m = 0;
        String answer = "";
        StringBuilder sb = new StringBuilder();

        StringTokenizer st = new StringTokenizer(str, " "); // 넘어온 str을 공백 기준으로 구분해줌

        while (st.hasMoreTokens()) { // 모든 토큰을 반복
            String x = st.nextToken(); // 구분한 토큰을 저장
            int len = x.length(); // 토큰의 길이값 저장 study => 5

            if (len > m) { // 같다로 할 경우 뒤에 같은 길이의 단어가 있으면 그 단어로 바뀌어서 >=이 아닌 >이여야만한다.
                m = len;
                answer = x;
            }
        }
        sb.append(answer);
        return sb.toString(); // 배열이 아닌 String으로 변환 후 return
    }

    public static void main(String[] args) throws IOException {
        Main t = new Main();

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();

        System.out.println(t.solution(str));

    }
}

2. Scanner

import java.util.*;
class Main {	
	public String solution(String str){
		String answer="";
		int m=Integer.MIN_VALUE;
		String[] s = str.split(" ");
		for(String x : s){
			int len=x.length();
			if(len>m){
				m=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.print(T.solution(str));
	}
}

3. Scanner + indexOf

import java.util.*;
class Main {	
	public 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){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str=kb.nextLine();
		System.out.print(T.solution(str));
	}
}

출력 화면


결과

  1. BufferedReader + StringTokenizer + StringBuilder 
  2. Scanner + indexOf
  3. Scanner

결과를 보면 알 수 있듯이 BufferedReader 로 받아서 출력하는게 Memory, Time 모두 승리했다. 현재는 속도 및 메모리에는 신경을 안쓰고 코딩 하고 있지만 속도나 메모리 제한이 있는 문제들은 꼭 BufferedReader를 사용해야 할 것 같다.

Comments