Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

문자열.문장 속 단어(indexOf(),substring()) 본문

알고리즘

문자열.문장 속 단어(indexOf(),substring())

ultra_dev 2023. 1. 12. 01:31
3. 문장 속 단어
 

설명

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

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

입력

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

출력

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

단어를 답으로 합니다.

예시 입력 1 

it is time to study

예시 출력 1

study

 

📌 1번 .split(); 활용하는 방법

  • 조심!!! >= 으로 하면 안됨. why? 같은 길이면 먼저 나온 단어가 답이라고 했으니
import java.util.Scanner;
class Main{
    public String solution(String str) {
        String answer = "";
        int m = Integer.MIN_VALUE;
        //가장 작은 값으로 초기화됨, 최대값으로 계속 갱신할거니까 처음에는 제일 작은 값으로! max 줄임말
        String[] s = str.split(" ");
        //띄어쓰기로 구분할거니까 .split();에서 공백넣어줘서 공백으로 구분
        for(String x : s){
            int len = x.length(); 
            if(len>m){   // 📌조심!!! >= 으로 하면 안됨. why? 같은 길이면 먼저 나온 단어가 답이라고 했으니
                m=len;    //최대값이 m으로 계속 갱신
                answer=x; //최대값이 발견될 때마다 answer 갱신
            }
        }
        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();  //한줄로 입력 받아야하니 nextLine();
        System.out.print(T.solution(str));
    }
}

📌 2번 .indexOf();

(==)는 두 피연산자의 값이 같으면 true 반환 , 그렇지 않으면 false 반환

(!=)는 피연산자에 동일한 값이 없으면 true 반환, 그렇지 않으면 false 반환

❗❗❗❗❗indexOf() 메서드는 존재하지 않으면 -1을 반환합니다.

📢

while((pos = str.indexOf(' ')) != -1)

따라서 이런 조건식이 가능한 것. 공백이 있으면 true가 되고 pos에 넣고

없으면 -1이 되니 조건식 종료

import java.util.Scanner;

//Q. 문장에서 제일 긴 단어 찾기
class Main{
    public String solution(String str) {
        String answer = "";
        int m = Integer.MIN_VALUE, pos;  //int a=5, b; 이런 느낌? 분리자를 활용해서 a,b를 한번에 선언하는 느낌 ㅡㅡ
        while((pos = str.indexOf(' ')) != -1){
        //공백 위치를 리턴해줌 ! 만약 발견 못하면 -1 리턴하고 while문 종료
				//❗❗indexOf() 메서드는 존재하지 않으면 -1을 반환
            String tmp = str.substring(0,pos); //pos는 공백 시작점이고, .substirng의 끝부분은 n-1이니 딱임
            int len = tmp.length();  //잘라낸 단어 길이
            if(len > m) {   // 조심!!! >= 으로 하면 안됨. why? 같은 길이면 먼저 나온 단어가 답이라고 했으니
                m = len;
                answer = tmp;  //이렇게 하면 계속 갱신함
            }
            str=str.substring(pos+1);  //다시 앞단어빼고 그 이후부터를 str 설정해서 while문 시작
                                                //마지막 단어로 가면 이제 위로 올라갔을 때 공백이 없으니 -1 돼서 끝나버림
                                                //따라서 마지막 단어일 경우 tmp에 못들어가니 그 처리가 필요함
        }
        if(str.length() > m ) answer = str;  //indexOf(); 쓰려면 이렇게 마지막 단어 처리 꼭 필요함
                                            //공백 없어서 -1리턴하고 while문 끝낸 이 마지막 단어 str이 m보다 크면 answer에 넣어주고 아님 말고
        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();  //한줄로 입력 받아야하니 nextLine();
        System.out.print(T.solution(str));
    }
}

'알고리즘' 카테고리의 다른 글

문자열. 숫자만 추출  (0) 2023.01.12
문자열.유효한 팰린드롬  (0) 2023.01.12
문자열.단어뒤집기  (0) 2023.01.12
문자열.회문문자열  (0) 2023.01.12
문자열.중복문자제거  (0) 2023.01.12
Comments