문제풀이1
import java.util.*;
public class Main {
public String solution(String str) {
String answer="";
int m =Integer.MIN_VALUE; // -2147000000으로 m값이 저장된다.
String[] s = str.split(" "); // str.split(구분자)의 반환타입이 String[] 사실을 명심
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(); //nextLine(): "1줄"을 통째로 입력받는다.
System.out.print(T.solution(str));
}
}
문제해설
▶ nextLine() 은 한줄을 통째로 입력 받는다.
▶ Integer.MIN_VALUE 를 사용하는 경우 대략적으로 -2147000000이 사용된다.
▶ split( ) 의 반환타입은 String[ ] 배열이라는 사실을 명심하자
▶ if(len>m) → 여기서 "=" 을 넣지 않는 경우
▶ 문자열길이가 동일한 다른 문자가 나왔을 때
▶ 갱신하지 않고 조건을 만족하는 첫번째 정답문자열만 저장된다.
▶ 반대로 len>=m 으로 하는 경우 조건을 만족하는 동일문자열이 나왔을 때
값이 갱신되어 뒤쪽의 정답문자열이 출력된다.
문제풀이2
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));
}
}
문제해설
▶ indexOf() : 해당 조건을 만족하는 인덱스의 번호를 반환해준다.
반환타입: int
해당 조건을 만족하는 인덱스를 발견하지 못한 경우 -1을 반환
▶ pos : 위 문제에서는 공백자리의 인덱스 값을 의미한다.
▶ subString(a) : a인덱스부터 끝가지 슬라이싱
▶ substring(a, b) : a인덱스부터 b인덱스 직전까지 슬라이싱
▶ str = str.substring(pos+1); while문을 반복할 때마다 문자열의 갱신시킴
▶ 그런데 마지막 문자열이 study가 되었을 때는 공백이 없기 때문에 while문 조건 통과x → 탈출
▶ while문을 돌면서 끝으로 저장된 문자열의 길이보다 맨 마지막 문자열이 길이("study")가 더 길다면
그 단어를 answer에 저장한다.
'자바 알고리즘 > String(문자열)' 카테고리의 다른 글
2. 대소문자 변환 (0) | 2022.11.16 |
---|---|
1. 문자 찾기 (0) | 2022.11.16 |