오늘보다 더 나은 내일의 나에게_

자바 알고리즘 문제 풀이 String Q03_문장 속 단어 본문

ALGORITHM/inflearn_javaAlgorithm

자바 알고리즘 문제 풀이 String Q03_문장 속 단어

chan_96 2022. 1. 23. 10:28
728x90
설명

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

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


입력

첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다. 문장은 영어 알파벳으로만 구성되어 있습니다.


출력

첫 줄에 가장 긴 단어를 출력한다. 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한

단어를 답으로 합니다.

 


예시 입력1


예시 출력

it is time to study study

 

코드

내가 입력한 코드

package String;

import java.util.Scanner;

public class Q03 {
	public String solution(String str) {
		String answer = "";
		String[] arr = str.split(" ");
		int max = 0;
		
		for (int i = 0; i < arr.length; i++) {
			if(arr[i].length() > max) {
				max = arr[i].length();
				answer = arr[i];
			}
		}
		return answer;
	}
	public static void main(String[] args) {
		Q03 T = new Q03();
		Scanner kb = new Scanner(System.in);
		String str = kb.nextLine();
		
		System.out.println(T.solution(str));
	}
}

 




해설 코드

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));
	}
}

 

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));
	}
}

 

 

풀이 및 정리 

- 문자열을 분리해야하므로 next()가 아닌 nextLine()메소드를 사용해야 공백을 포함해 입력받을 수 있다.

- 풀이에서 Integer.MIN_VALUE를 사용했는데 이것은 앞에있는 타입의 크기중 제일 작은 값을 반환해준다.

MIN_VALUE => 숫자타입의 래퍼클래스(Integer, Byte, Long, Short)를 사용해 사용한 타입의 제일 작은 수를 반환해준다. 
MAX_VALUE => 위와 동일하고 제일 큰 수를 반환해준다.


indexOf( ) => 지정한 문자가 문자열에 몇번째에 있는지를 반환한다.(인덱스 0부터 시작해 반환, 반환 타입 int)
String str = "ABCDEF";
String idx = str.indexOf("D");
System.out.println(idx); // 3 출력



subString( ) 
=> 시작범위 값과, 끝나는 범위의 값을 매개변수로 받는다. 시작범위부터 끝나는 범위의 값 전까지 반환해준다(끝나는 범위 값은 포함하지않음!!)
String str = "ABCDEF";
String sub = str.subString(0,3);
System.out.println(sub); // ABC 출력​


728x90
Comments